java中的泛型数组创建
可能重复: 我正在尝试创建泛型类型的类。这是我的班级档案java中的泛型数组创建,java,generics,Java,Generics,可能重复: 我正在尝试创建泛型类型的类。这是我的班级档案 public class TestClass<T> implements AbstractDataType<T>{ T[] contents; public TestClass(int length) { this.contents = (T[])new Object[length]; } } 但是内容只是从对象类继承了方法。如何为内容创建抽象数组 不能在Java中创
public class TestClass<T> implements AbstractDataType<T>{
T[] contents;
public TestClass(int length) {
this.contents = (T[])new Object[length];
}
}
但是内容只是从对象类继承了方法。如何为内容创建抽象数组 不能在Java中创建泛型数组。
如中所述,上述规则表明,上述规则意味着数组创建表达式中的元素类型不能是参数化类型,而只能是无界通配符。不能在Java中创建泛型数组。
如中所述,上述规则表明,上述规则意味着数组创建表达式中的元素类型不能是参数化类型,而只能是无界通配符。我认为,在任何访问内容的方法中,都需要将其转换为类型T。其主要原因是,作为对象数组,Java将内容视为对象以适应它们。因此,虽然内容可能是一个T数组,但它仍然只是一个Object类型的数组。我认为,在任何访问内容的方法中,都需要将它们转换为T类型。其主要原因是,作为一个对象数组,Java将内容视为对象以适应它们。因此,虽然内容可能是一个T数组,但它仍然只是一个Object类型的数组。至于初始化内容,我认为您所能做的是最好的。如果有办法的话,ArrayList可能会在第132行这样做: 但是,当你说内容只是从对象类继承了方法时,我假设你的意思是,当你在代码中处理一个T实例时,你只能访问像toString和equals这样的方法,我猜这是主要问题。这是因为你没有告诉编译器什么是T实例。如果希望从特定接口或类型访问方法,则需要在T上设置类型约束 下面是一个例子:
interface Foo {
int getSomething();
void setSomethingElse(String somethingElse);
}
public class TestClass<T extends Foo> implements AbstractDataType<T> {
T[] contents;
public TestClass(int length) {
this.contents = (T[])new Object[length];
}
public void doSomethingInteresting(int index, String str) {
T obj = contents[index];
System.out.println(obj.getSomething());
obj.setSomethingElse(str);
}
}
因此,现在您可以访问从对象继承的方法以外的方法。至于初始化内容,我认为您所拥有的是您所能做的最好的。如果有办法的话,ArrayList可能会在第132行这样做:
但是,当你说内容只是从对象类继承了方法时,我假设你的意思是,当你在代码中处理一个T实例时,你只能访问像toString和equals这样的方法,我猜这是主要问题。这是因为你没有告诉编译器什么是T实例。如果希望从特定接口或类型访问方法,则需要在T上设置类型约束
下面是一个例子:
interface Foo {
int getSomething();
void setSomethingElse(String somethingElse);
}
public class TestClass<T extends Foo> implements AbstractDataType<T> {
T[] contents;
public TestClass(int length) {
this.contents = (T[])new Object[length];
}
public void doSomethingInteresting(int index, String str) {
T obj = contents[index];
System.out.println(obj.getSomething());
obj.setSomethingElse(str);
}
}
所以,现在您可以访问从对象继承的方法以外的方法。您认为ArrayList.toArray和Arrays.copyOf是如何实现的
看
你觉得ArrayList.toArray和Arrays.copyOf怎么样
看
-1表示信息不正确:内容[0]已为T类型,将其转换为T不会改变任何事情。-1表示信息不正确:内容[0]已为T类型,将其转换为T不会改变任何事情。@meriton更新了我的答案。PS null具有任何引用类型提供的方法。@meriton更新了我的答案。PS null具有任何引用类型提供的方法。