是否可以在java泛型类中包含可变数量的Element类型

时间:2013-05-19 12:25:19

标签: java generics

我想知道是否有可能有这样的事情:

public class foo<T...>

所以你可以像

一样调用这个类
Foo<Object0>
Foo<Object0, Object1>
Foo<Object0, Object1, Object2>

使用Object 0,1和2不同的类型,如Integer,Float,String等。这是可能的,还是我必须为每种类型的泛型类型编写一个类?如果可以,我将如何处理不同的类型?

3 个答案:

答案 0 :(得分: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> |的{​​{1}}语法是不可能的。{/ p>

答案 1 :(得分:3)

使用以下格式定义泛型类:

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

您必须指定类型参数T1,T2和Tn。 因此,class name<T...>是不可能的。

答案 2 :(得分:1)

您在谈论varargs通用参数。

不,你不能。主要是因为没有办法引用类型,除非你使用了不支持的数组地址,如T[0]等。