У меня есть тест Java JUnit 4 и общий класс, который создает общий массив. Когда я создаю метод для возвращения этого общего массива, я получаю сообщение об ошибке после его возвращения. Он работает, если я возвращаю ArrayList (где T - экземпляр Byte by class) в ArrayList.Возвращение T [] (где T Byte []) Byte []
Почему массив кажется экземпляром и применим (проверен на более сложных классах), но я не могу вернуть ссылку на этот массив?
Ошибка:
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);
}
}
Но при фиксации класса вы испортите универсальность метода, не так ли?Таким образом, у вас будет 'ClassCastException' для каждого типа, но' Byte' –
В OP TestClass нет никакого общего метода. 'TestClass' сам по себе является общим ... –
Это на пути к тому, куда я хочу идти (отредактировал Q, чтобы, надеюсь, лучше отразить это). Я получаю общий массив и столкнулся с новым методом Object [x] и Array.newInstance(). Неудивительно, что нельзя использовать Array.newInstance(), не передавая объект класса. –