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具有任何引用类型提供的方法。