考慮下面的構造函數的類Foo
(爲了清楚起見是不泛型類):什麼是泛型構造函數的用例?
public <T> Foo(T obj) { }
這是構造有效的語法,就像正常generic methods。
但是這個語法的用法是什麼?通常泛型方法爲其返回類型提供了類型安全性,並且可以受益於編譯器的類型推斷。例如:
Pair<String, Integer> stringInt = Pair.of("asfd", 1234);
,但對一個構造函數的調用總是返回其聲明類的一個實例,因此它的類型參數的返回類型沒有影響。上面的構造可能只是其erasure取代:
public Foo(Object obj) { }
當然泛型的不僅是關於返回類型類型安全。構造函數可能只是想約束參數(S)的類型被傳遞但是,上述理由仍適用於有限制類型參數:
public <N extends Number> Foo(N number) { }
public Foo(Number number) { } //same thing
即使嵌套類型參數與邊界使用通配符處理:
public <N extends Number, L extends List<N>> Foo(L numList) { }
public Foo(List<? extends Number> numList) { } //same thing
那麼具有泛型構造函數的合法用例是什麼?
啊哈,很有意思! +1 – 2012-02-22 23:16:49
+1,這是一個很好的例子,雖然它有點作弊,因爲OP特別說封閉類型不是通用的。 ('Stream'將是通用的。) –
2012-02-22 23:23:25
@JohnFeminella - 我只是說我的具體例子'Foo'不是通用的,只是爲了避免混淆。我不是說它是對答案的限制。 – 2012-02-22 23:27:59