我知道以下语法是不合法的:
void dolist2(List<? extends Number> list) {
list.add(new Integer(3));
}
但我不知道编译器如何知道它是不合法的。如果我查看 List.java 的源代码,我会看到:
boolean add(E e);
我看不出这个声明有什么特别之处,甚至没有像@IllegalWhenInvokedOnUpperBoundReference 这样的注释。编译器如何知道强制执行此限制?我如何对自己的课程设置类似的限制?