如何寫最少的代碼

Java:我想返回多個返回值
秀一下Go的多返回值:

package main
import "fmt"

// 返回 X + Y 和 X Y
func Computer(X, Y int) (int, int) {
return X + Y, X

Y
}
衆所周知,Java僅支持單一返回值,一般情況下如果需要返回多個對象,我們會根據代碼語義選擇容器或者新建一個新的類,把我們需要的數據包起來。

這樣做有沒有問題?當然沒有問題,但是瑕疵就在於:可能會產生沒啥語義但又不得不存在的中間類,我個人非常討論該類代碼,那麼該如何解決這種問題呢?

首先需要認識到,解決方案必須滿足幾個要求:

代碼可複用
語義要清晰
安全
既然如此,我們可以採用泛型來滿足複用、語義清晰的要求,用中間類來滿足代碼安全性的要求,代碼如下:


public class MultipleTwoReturn<A, B> {
/ 第一個返回值 /
private final A first;

/** 第二個返回值 **/
private final B second;

public MultipleTwoReturn(A first, B second) {
    this.first = first;
    this.second = second;
}

// 省略Get方法

}
同時,我們可以依賴於繼承,讓該工具類拓展更多的參數:

public class MultipleThreeReturn<A, B, C> extends MultipleTwoReturn<A, B> {

/** 第三個返回值 **/
private final C third;

public MultipleThreeReturn(A first, B second, C third) {
    super(first, second);
    this.third = third;
}

}
測試類:

public class MultipleApp {

public static void main(String[] args) {
    MultipleTwoReturn<Integer, String> returnTest = MultipleApp.getReturnTest();
    System.out.println(returnTest.getFirst());
    System.out.println(returnTest.getSecond());
}

private static MultipleTwoReturn<Integer, String> getReturnTest() {
    MultipleTwoReturn<Integer, String> demo = new MultipleTwoReturn<>(0, "Kerwin Demo.");
    return demo;
}

}
本質還是普通對象,但是加上泛型後威力劇增!由於在方法定義時就強制了泛型約束,語義非常清晰,同時可以完全杜絕上述的無語義中間類,當然一些必要的,有業務含義的組裝類,不建議使用這種方式。

泛型:我想new一個對象
大家在學Java泛型之初有沒有這種想法?我想利用作爲泛型約束,卻需要new一個T,但是Java它new不出來啊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章