【问题标题】:Cast List type so that one function can take in a more general type of list [duplicate]转换列表类型,以便一个函数可以采用更通用的列表类型[重复]
【发布时间】:2021-02-15 22:47:20
【问题描述】:

假设我的类层次结构如下

class Company{
... 
}

class Employee extends Company{
...
}


class Interns extends Company{
...
}

class Test{
   

   private List<Employee> employees;
   private List<Intern> intern;

   // Suppose that multiple objects of Interns and Employees have 
been properly initialized and added to the above two Lists accordingly

   public void process(List<Company> company){
   ...
   }
   
}

对于我的process(),我希望能够使用相同的函数而不需要重载(这只是一个示例,我会有更多的类,所以重载可能看起来很长)。

我应该如何处理这两个列表,以便它们可以传递到process()?我试过直接通过它们。但是,显然,Java 不能将List&lt;Employee&gt;List&lt;Intern&gt; 直接转换为List&lt;Company&gt;

另外,编写多个重载方法(尽管数量)更好还是尝试转换类型以便一个函数可以全部使用。

【问题讨论】:

标签: java


【解决方案1】:

您应该使用以下符号

public void process(List<? extends Company> company) {
    // stuff
}

请记住,您只能在该方法内部调用Company 中定义的方法。

更多信息请参见PECS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多