Почему метод getClass вызывает ошибку приведения типа в универсальном коде?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему метод getClass вызывает ошибку приведения типа в универсальном коде?

Сообщение Anonymous »

В следующем коде:

Код: Выделить всё

public class Test {

public E test(){
E test = (E) BigDecimal.ONE;
return test;
}

public static void main(String[] args) {
Test test = new Test();
test.test();
test.test().getClass();
}
}
Метод test.test() не выдает ошибку, но test.test().getClass() выдает сообщение «класс java.math.BigDecimal не может быть приведен к классу Java. ошибка lang.String. Эта ошибка возникает во время выполнения, а не в среде IDE.
Я понимаю, что Java выполняет стирание типа во время компиляции, но я не понимаю, почему метод getClass() запускает тип. проблема с кастингом.
На мой взгляд, код после стирания типа выглядит следующим образом:

Код: Выделить всё

public class Test {

public Object test(){
Object test = (Object) BigDecimal.ONE;
return test;
}

public static void main(String[] args) {
Test test = new Test();
test.test();
test.test().getClass();
}
}
Итак, test.test() возвращает объект, который на самом деле является BigDecimal, но почему BigDecimal.getClass() выдает ошибку, выдает 'класс java.math.BigDecimal не может быть приведен к классу Java Ошибка .lang.String?

Подробнее здесь: https://stackoverflow.com/questions/788 ... neric-code

Вернуться в «JAVA»