【发布时间】:2014-10-09 14:21:12
【问题描述】:
假设我有一个 List 定义如下。
private List<? extends GeneralBudgetYearBean> budgetYearBeans;
// + Getters/setters...
为什么我不能在这个类之外普遍引用这个列表如下:
GeneralBudgetYearBean gbyb;
getBudgetYearBeans().add(bgyb);
错误是:
The method add(capture#6-of ? extends GeneralBudgetYearBean) in the type List<capture#6-of ? extends GeneralBudgetYearBean> is not applicable for the arguments (GeneralBudgetYearBean)
这没有意义。是不是因为“?extends T”和“T”不一样,这里不能用“T”代替?
我需要能够在没有具体细节的情况下一般地操作这个类。在某些时候,会在扩展类中构造一个“SUBGeneralBudgetYearBeans”的ArrayList,这就是为什么我需要使用“? extends GeneralBudgetYearBean”表示法。
【问题讨论】:
-
List<GeneralBudgetYearBean>呢? -
@sp00m 我不能使用它。正如我所说,会在某个时候构造一个 ArrayList
,而“? extends”符号是实现这一目标的唯一方法。 -
@geneb。那不是问题。您仍然可以将
SubBudgetYearBeans 添加到List<GeneralBudgetYearBean>。
标签: java generics inheritance