我想知道是否有可能有這樣的事情元素類型的變量數量:是否有可能在一個Java泛型類
public class foo<T...>
這樣你就可以調用類像
Foo<Object0>
Foo<Object0, Object1>
Foo<Object0, Object1, Object2>
與對象0,1和2不同的類型,如Integer,Float,String等。這是可能的,還是我必須爲每個長度的泛型編寫一個類?如果這是可能的,我將如何處理不同的類型?
我想知道是否有可能有這樣的事情元素類型的變量數量:是否有可能在一個Java泛型類
public class foo<T...>
這樣你就可以調用類像
Foo<Object0>
Foo<Object0, Object1>
Foo<Object0, Object1, Object2>
與對象0,1和2不同的類型,如Integer,Float,String等。這是可能的,還是我必須爲每個長度的泛型編寫一個類?如果這是可能的,我將如何處理不同的類型?
不,你不能那樣做。你可以做的最好的是public class Foo<T extends SomeClassOrInterface>
。所以在你的Integer
和Float
的例子中,你可以定義public class Foo<T extends Number>
。
您還可以指定T必須實現多個接口。
語法public class Foo<T extends SomeInterface1 & SomeInterface2>
有效,&
含義AND
。
不幸的是,語法public class Foo<T extends SomeInterface1 | SomeInterface2>
與|
的含義OR
是不可能的。
泛型類被定義具有以下格式:
class name<T1, T2, ..., Tn> { /* ... */ }
必須指定類型參數T1,T2和Tn。 因此,class name<T...>
是不可能的。
你在說一個varargs通用參數。
不,你不能。很大程度上是因爲沒有辦法引用這些類型,除非您使用了不受支持的數組地址,如T[0]
等。
爲什麼你需要那個?或者它只是好奇心? –
@pivovarit例如對於'Tuple'類型,或對於可調整簽名的'Callable'類型。 –
@pivovarit我能想到的明顯例子是泛型類。也就是說沒有不可能的,例如scala擁有這樣一個類的版本可以達到15個左右的參數。可惜是的 – Voo