2013-05-19 51 views
10

我想知道是否有可能有這樣的事情元素類型的變量數量:是否有可能在一個Java泛型類

public class foo<T...> 

這樣你就可以調用類像

Foo<Object0> 
Foo<Object0, Object1> 
Foo<Object0, Object1, Object2> 

與對象0,1和2不同的類型,如Integer,Float,String等。這是可能的,還是我必須爲每個長度的泛型編寫一個類?如果這是可能的,我將如何處理不同的類型?

+0

爲什麼你需要那個?或者它只是好奇心? –

+4

@pivovarit例如對於'Tuple'類型,或對於可調整簽名的'Callable'類型。 –

+1

@pivovarit我能想到的明顯例子是泛型類。也就是說沒有不可能的,例如scala擁有這樣一個類的版本可以達到15個左右的參數。可惜是的 – Voo

回答

5

不,你不能那樣做。你可以做的最好的是public class Foo<T extends SomeClassOrInterface>。所以在你的IntegerFloat的例子中,你可以定義public class Foo<T extends Number>

您還可以指定T必須實現多個接口。

語法public class Foo<T extends SomeInterface1 & SomeInterface2>有效,&含義AND

不幸的是,語法public class Foo<T extends SomeInterface1 | SomeInterface2>|的含義OR是不可能的。

3

泛型類被定義具有以下格式:

class name<T1, T2, ..., Tn> { /* ... */ } 

必須指定類型參數T1,T2和Tn。 因此,class name<T...>是不可能的。

1

你在說一個varargs通用參數。

不,你不能。很大程度上是因爲沒有辦法引用這些類型,除非您使用了不受支持的數組地址,如T[0]等。

相關問題