У меня есть этот класс:
class MyClass<N extends Number> {
N n = (N) (new Integer(8));
}
И я хочу получить эти выходы:
System.out.println(new MyClass<Long>().n);
System.out.println(new MyClass<Long>().n.getClass());
-
Вывод первого оператора
System.out.println()
:8
-
Вывод второго оператора
System.out.println()
:java.lang.ClassCastException: java.lang.Integer (in module: java.base) cannot be cast to java.lang.Long (in module: java.base)
Почему я получаю первый вывод? Разве нет отливки? Почему я получаю исключение во втором выходе?
PS: Я использую Java 9; Я попробовал это с помощью JShell, и я получил исключение на обоих выходах. Затем я попробовал его с IntelliJ IDE и получил первый вывод, но исключение на втором.