有没有办法将通用参数限制为数组?

时间:2018-03-16 23:02:15

标签: java arrays generics restriction

我试过" T扩展数组"但那不起作用,

public class Foo<T extends Array> {
    { ...}
}

public class Bar {
    {
        Foo<int[]> f; <-- Error
    }
}

从我看到的,我不认为它是可行的,但是,嘿,我不是Java大师

2 个答案:

答案 0 :(得分:0)

不,您无法使用SKLabelNode扩展课程。您只能扩展Java类型,如类,接口等。(您也不能扩展Array,因为它是基本类型)。如果你想要一种新类型的数组,你必须创建一个该对象的数组,例如intint[] intArray = new int[5];

read here for why it is not allowed

答案 1 :(得分:0)

如果要将类型变量T限制为引用数组类型,则可以将T作为组件类型,并限制组件类型,并使用{{1}你需要数组类型,而不是

T[]

你会有

public class Foo<T extends Object[]> {
   T obj;
}

Foo<String[]> f;

如果你想允许public class Foo<T extends Object> { T[] obj; } Foo<String> f; 也是基本数组类型,那么在不允许非数组引用类型的情况下也是不可能的,因为像{{1}那样只有基本类型数组的超类型},T等等int[](也许还有boolean[]Object)。没有“just”原语和引用数组的超类型。您可以做的限制最多的是

Cloneable

如果你这样做了,你将无法对Serializable做任何事情,除了你可以对任何public class Foo<T extends Cloneable & Serializable> 做的事情(注意T也不{ {1}}接口提供任何方法),因此您可能根本不限制Object