具有泛型的Java对象数组

时间:2015-08-07 09:11:38

标签: java oop generics

我有以下结构:

public class SomeObject<T> {

    int key;
    T value;
    ...
}

在另一堂课中:

public class TestSomeObject<T> {

    SomeObject<T>[] data;

    TestSomeObject() {
         this.data =  (SomeObject<T>[]) new Object[capacity];
    }
}

当然,构造函数中的那行完全失败,并带有异常:

[Ljava.lang.Object; cannot be cast to [SomeObject;

这有什么变通方法吗?或者有什么方法可以重组它以使其工作?

3 个答案:

答案 0 :(得分:3)

使用

@SuppressWarnings("unchecked")
TestSomeObject() {
     this.data =  new SomeObject[capacity];
}

答案 1 :(得分:0)

你不能将新的Object()强制转换为SomeObject。

也许你想要这样的东西?

public class TestSomeObject<T> {

  SomeObject<T>[] data;

  TestSomeObject() {
       this.data =  new SomeObject[] {new SomeObject<T>()};
  }

  public static void main(String... args) {
    new TestSomeObject<String>();
  }

}

答案 2 :(得分:0)

如果对象在“new Object [capacity];”是java.lang.Object,这是正常的。 您无法将新Object转换为任何内容。 你必须这样做:

this.data = new SomeObject<T>[capacity];