Java继承:方法集(List<;Bean>;)不适用于参数ArrayList<;子bean>;
我在下面得到一个错误 层次结构:GeneralBudgetBean->RRBudgetBean. 它们包含具有以下层次结构的数据成员: GeneralBudgetYearBean->RRBudgetYearBean 父类-GeneralBudgetBean.javaJava继承:方法集(List<;Bean>;)不适用于参数ArrayList<;子bean>;,java,inheritance,Java,Inheritance,我在下面得到一个错误 层次结构:GeneralBudgetBean->RRBudgetBean. 它们包含具有以下层次结构的数据成员: GeneralBudgetYearBean->RRBudgetYearBean 父类-GeneralBudgetBean.java // Data member private List<GeneralBudgetYearBean> budgetYearBeans; // Getters/setters public List<Gen
// Data member
private List<GeneralBudgetYearBean> budgetYearBeans;
// Getters/setters
public List<GeneralBudgetYearBean> getBudgetYearBeans() {
return budgetYearBeans;
}
public void setBudgetYearBeans(List<GeneralBudgetYearBean> budgetYearBeans) {
this.budgetYearBeans = budgetYearBeans;
}
//数据成员
私人清单预算类菜豆;
//能手/二传手
公共列表getBudgetYearBeans(){
返回budgetYearBeans;
}
public void setBudgetYearBeans(列出budgetYearBeans){
this.budgetYearBeans=budgetYearBeans;
}
扩展类-RRBudgetBean.java
public class RRBudgetBean extends GeneralBudgetBean {
//...
public void initRRBudgetBean()
{
this.setBudgetYearBeans(new ArrayList<RRBudgetYearBean>());
}
}
公共类RRBudgetBean扩展了GeneralBudgetBean{
//...
public void initRRBudgetBean()
{
这个.setBudgetYearBeans(新的ArrayList());
}
}
错误:
The method setBudgetYearBeans(List<GeneralBudgetYearBean>) in the type GeneralBudgetBean is not applicable for the arguments ArrayList<RRBudgetYearBean>
类型GeneralBudgetBean中的方法setBudgetYearBeans(List)不适用于ArrayList参数
换句话说,错误是:
Method method(List<Bean>) not applicable for arguments ArrayList<SubBean>.
方法(列表)不适用于参数ArrayList。
来自教程():
Box
和Box
不是Box
的子类型
在这种情况下,您必须将方法签名更改为
public void setBudgetYearBeans(List<? extends GeneralBudgetYearBean> budgetYearBeans) {
this.budgetYearBeans = budgetYearBeans;
}
public void setBudgetYearBeans(列表更改
setBudgetYearBeans(List<GeneralBudgetYearBean> budgetYearBeans)
setBudgetYearBeans(列出budgetYearBeans)
到
setBudgetYearBeans(ArrayList budgetYearBeans)
一般来说,使方法参数类型更具体,方法返回值更一般是一种好的做法。ArrayList
不扩展List
@NathanMerrillList
仍然可以引用ArrayList
,因为它正在实现List
接口。@NathanMerrill不,没有s那里有一个子类型关系。(通常最好从参数中复制可变值,然后再返回值。)尝试setBudgetYUearBeans(我无意冒犯,但这是一个糟糕的建议。-1恰恰相反。你应该对接受的东西更加开放,对回报的东西更加严格!而且这不是问题的正确答案。正确答案由@Rayan给出Ral@SvetlinZarev为什么对你的回报更严格?我更喜欢对两者都自由。因为如果我eturnSet
例如,我可以将其分配给类型为Collection
的变量,但反之亦然。我的评论是关于接口/具体实现的使用,而不是关于他显然没有得到的泛型right@SvetlinZarev但是,他难道不能返回集合并更加自由吗?
setBudgetYearBeans(ArrayList<GeneralBudgetYearBean> budgetYearBeans)