Я наткнулся на ситуацию с кастомной Java, в которой присутствуют общие функции и интерфейсы, которые я не понимаю.
Пожалуйста, рассмотрите следующий код, в котором я создаю List<Interface1>
. А затем get()
элемент и отбросить его до Interface2
без ошибки компилятора, хотя эти два интерфейса полностью не связаны.
import java.util.*;
public class Main {
public static void main(String ... args) {
List<Interface1> list = new ArrayList<>();
list.add(new Interface1() {});
Interface1 ok = list.get(0);
Interface2 why = (Interface2)list.get(0);
}
}
interface Interface1 {
}
interface Interface2 {
}
Может ли кто-нибудь объяснить, почему не существует ошибки компилятора для трансляции на втором get(0)
?
Две боковые заметки: Выполнение класса вызывает a ClassCastException
(как и ожидалось). И использование двух классов вместо интерфейсов действительно порождает ошибки компиляции.