我想知道是否有可能有这样的事情元素类型的变量数量:是否有可能在一个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