我尝试了“T extends Array”,但这不起作用,
public class Foo<T extends Array> {
{ ...}
}
public class Bar {
{
Foo<int[]> f; <-- Error
}
}
据我所知,我认为这不可能,但是嘿,我不是 Java 大师
如果要将类型变量 T
限制为引用数组类型,则可以将 T
作为组件类型,并限制组件类型,并在需要数组类型的地方使用 T[]
,即代替
public class Foo<T extends Object[]> {
T obj;
}
Foo<String[]> f;
你会有
public class Foo<T extends Object> {
T[] obj;
}
Foo<String> f;
如果您也想允许 T
成为基元数组类型,那么如果不允许非数组引用类型,这是不可能的,因为像 int[]
、boolean[]
等基元数组类型的唯一父类(super class)型是 Object
(也许还有 Cloneable
和 Serialized
)。不存在“只是”原始数组和引用数组的父类(super class)型。您可以做的最严格的限制是这样的
public class Foo<T extends Cloneable & Serializable>
如果您这样做,您将无法对 T
执行任何操作,除非您可以对任何 Object
执行任何操作(请注意,Cloneable
和 Serializing
接口(interface)均不提供任何方法),因此您最好根本不限制 T
。
我是一名优秀的程序员,十分优秀!