我尝试了 "T extends Array",但它不起作用。
public class Foo<T extends Array> {
{ ...}
}
public class Bar {
{
Foo<int[]> f; <-- Error
}
}
根据我所看到的,我认为这是不可能的,但是嘿,我不是Java大师。
我尝试了 "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;
you would have
public class Foo<T extends Object> {
T[] obj;
}
Foo<String> f;
T
也是原始数组类型,那么如果不允许非数组引用类型,这是不可能的,因为像int[]
、boolean[]
等原始数组类型的唯一超类型是Object
(也可能是Cloneable
和Serializable
)。没有“只有”基本和引用数组的超类型。你能做的最严格的限制可能是这样的:public class Foo<T extends Cloneable & Serializable>
如果你这样做了,那么你将无法对 T
做任何操作,除非是你可以对任何 Object
做的操作(请注意,Cloneable
和 Serializable
接口都不提供任何方法),所以你可能干脆不限制 T
。
Array
来扩展一个类。你只能扩展Java类型,比如类、接口等(你也不能扩展原始类型int
)。如果你想要一个新的数组类型,你必须创建一个该对象的数组,例如int[] intArray = new int[5];
或者Foo[] foo = new Foo[5];
T
,例如返回T[]
,接受T[]
参数等。 - Andy Turnerint[]
)问题示例中使用的,只支持对象数组。 - Andreas