java - 使用泛型时,List 内部如何检查方法调用的类型?

标签 java generics

鉴于此List<Employee> :

List <Employee> empList=new ArrayList<Employee>();

当我尝试添加Student时:

l.add(0,new Student(1,2,3));

列表如何解决这个问题并给我编译错误?

最佳答案

其实它并不是特指List进行检查的是编译器(正如您所暗示的那样)。

List只需提供两条信息:

  • 有一个类型 E其中类型 List参数化:

    public interface List<E> extends Collection<E>
    
  • 方法add接受 E 类型的对象:

    boolean add(E e);
    

如果你构建一个List<Employee>然后编译器知道你不能调用add与任何除了Employee如果您尝试这样做,将会出现编译器错误。

还应该注意的是,在运行时没有这样的检查!因此,如果您以某种方式设法“潜行”编译器所做的检查(例如通过使用 a raw type ),那么您可以对 List 做各种错误的事情。并且运行时不会检测到问题(直到您尝试以非通用方式访问“错误”类型)。

关于java - 使用泛型时,List 内部如何检查方法调用的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12172564/

相关文章:

Java 泛型集合

java - 使用泛型和反射的单例工厂

c# - IEnumerable <T>的实现适用于foreach,但不适用于LINQ

java - 警告/错误含义 - GbaRequest - GbaRequest : Constructor Called 222 userAgent Apache-HttpClient/UNAVAILABLE

java - Appengine 转换 Api (java)

java - Spring Boot Maven 插件,其依赖项中有一个主类

c# - EF Core,当我只有一个包含类型的字符串变量时,如何查询我的 DbContext?

具有继承和协变的 Java 泛型

java - Hibernate:一对多/多对一删除失败

java - 从段落中提取给定的子字符串