Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java继承:方法集(List<;Bean>;)不适用于参数ArrayList<;子bean>;_Java_Inheritance - Fatal编程技术网

Java继承:方法集(List<;Bean>;)不适用于参数ArrayList<;子bean>;

Java继承:方法集(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

我在下面得到一个错误

层次结构:GeneralBudgetBean->RRBudgetBean.

它们包含具有以下层次结构的数据成员: GeneralBudgetYearBean->RRBudgetYearBean

父类-GeneralBudgetBean.java

// 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
@NathanMerrill
List
仍然可以引用
ArrayList
,因为它正在实现
List
接口。@NathanMerrill不,没有s那里有一个子类型关系。(通常最好从参数中复制可变值,然后再返回值。)尝试
setBudgetYUearBeans(我无意冒犯,但这是一个糟糕的建议。-1恰恰相反。你应该对接受的东西更加开放,对回报的东西更加严格!而且这不是问题的正确答案。正确答案由@Rayan给出Ral@SvetlinZarev为什么对你的回报更严格?我更喜欢对两者都自由。因为如果我eturn
Set
例如,我可以将其分配给类型为
Collection
的变量,但反之亦然。我的评论是关于接口/具体实现的使用,而不是关于他显然没有得到的泛型right@SvetlinZarev但是,他难道不能返回
集合
并更加自由吗?
setBudgetYearBeans(ArrayList<GeneralBudgetYearBean> budgetYearBeans)