我有一个 Java JUnit 4 测试和一个创建泛型数组的泛型类。当我创建一个方法来返回这个通用数组时,我在返回它时收到一条错误消息。如果我将一个 ArrayList(其中 T 是按类实例化的字节)返回一个 ArrayList,它就可以工作。
为什么数组似乎已实例化且可用(在更复杂的类上测试)但我无法返回对该数组的引用?
错误:
java.lang.ClassCastException: [Lcom.waikato.assignment.Object; cannot be cast to [Ljava.lang.Byte;
at com.waikato.testing.TestJava.test(TestJava.java:20)
班级:
public class TestClass<T> {
T[] array;
@SuppressWarnings("unchecked")
public TestClass() {
array = (T[]) new Object[32];
}
public T[] getArray() {
return array;
}
public boolean doThing() {
T[] t = array;
return t == array && t != null;
}
}
测试:
public class TestJava {
@Test
public void test() {
TestClass<Byte> t = new TestClass<Byte>();
Byte[] b = t.getArray(); // Crash caused
assertTrue(t.doThing()); // Works when above line is removed.
assertTrue(b.length != 0);
}
}