2013-05-19 50 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]等。

相关问题