鉴于此List<Employee>:
List <Employee> empList=new ArrayList<Employee>();
Run Code Online (Sandbox Code Playgroud)
当我试图添加一个Student:
l.add(0,new Student(1,2,3));
Run Code Online (Sandbox Code Playgroud)
列表如何解决这个并给我编译错误?
实际上它不是特定的List检查,它是编译器(正如你所暗示的那样).
在List简单地提供两条信息:
有一种类型参数化E的类型List:
public interface List<E> extends Collection<E>
Run Code Online (Sandbox Code Playgroud)该方法add接受一个类型的对象E:
boolean add(E e);
Run Code Online (Sandbox Code Playgroud)如果你构建了一个,List<Employee>那么编译器知道你不能add用除了 和之外的任何东西调用,并且Employee如果你尝试的话会给编译器错误.
还应该注意的是,运行时没有这样的检查!因此,如果你以某种方式设法"偷偷摸摸"编译器所做的检查(例如使用原始类型),那么你可以对你做各种错误的事情,List运行时将无法检测到问题(直到你尝试以非通用方式访问"错误"类型).