interface I{}
class A implements I{}
class B{}
Во-первых:
I[] arr = new A[10];
arr[0] = (I) new B(); // will produce ClassCastException at runtime
Во-вторых: где, если я использую конкретный класс
I[] arr = new A[10];
arr[0] = (A) new B(); // will produce compile-time error
Какая разница, если в моем первом примере, (I) new B()
, компилятор java также должен произвести ошибку компиляции?
Разве это не значит, что компилятор java может отличить, что он также является "неконвертируемым типом"? Особенно, когда новый оператор приходит немедленно?
Есть ли какой-либо случай/шанс, что возможно, что создание этого нового экземпляра B может создать конвертируемый тип типа I?
В какой-то момент я знаю, что компилятор Java не должен сразу говорить, что это ошибка компилятора, например, когда вы это делаете:
I i = (I) getContent(); // wherein getContent() will return a type of Object
Edit:
Позвольте мне пояснить этот вопрос, почему это не является возможным дублированием этого: Передавать ссылку известного типа на интерфейс вне иерархии типов
Цель этого вопроса заключается не в том, что я не знаю, что будет результатом или что-то не так с чем-то и т.д.
Я просто хочу узнать "более подробное объяснение технически" о том, почему JVM ведет себя так или почему Java придумал такое решение о том, чтобы не сделать такой сценарий ошибкой времени компиляции.
Как мы все знаем, всегда лучше находить "проблемный код" во время компиляции, а не во время выполнения.
Другое дело, ответ, который я ищу, был найден здесь, в этой теме, не на тех "дубликатах?".