我有一个Java JUnit 4测试和一个创建通用数组的泛型类.当我创建一个返回此通用数组的方法时,我会在返回它时收到错误消息.如果我将ArrayList(其中T是通过类实例化的Byte)返回到ArrayList,它就可以工作.
为什么数组似乎被实例化和可用(在更复杂的类上测试)但我不能返回对该数组的引用?
错误:
java.lang.ClassCastException: [Lcom.waikato.assignment.Object; cannot be cast to [Ljava.lang.Byte;
at com.waikato.testing.TestJava.test(TestJava.java:20)
Run Code Online (Sandbox Code Playgroud)
类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
测试:
public class TestJava {
@Test
public void test() {
TestClass<Byte> t = new TestClass<Byte>();
Byte[] b = t.getArray(); // Crash caused
assertTrue(t.doThing()); // …Run Code Online (Sandbox Code Playgroud)