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);
}
}