我有一个像这样的Base抽象类:
public abstract class BaseModel {
//some code
}
我正在使用另一个这样的Base抽象类来扩展它:
public abstract class BaseChildParentModel extends BaseModel {
public abstract <E extends BaseModel> List<E> getChildren();
public abstract <E extends BaseModel> List<E> createChildList();
public void addChild(BaseModel child) {
List<BaseModel> children = getChildren();
if (children == null)
children = createChildList();
children.add(child);
}
}
我的上一课如此扩展BaseChildParentModel
:
public class Subject extends BaseChildParentModel {
//some fields
public ArrayList<Subject> ChildSubjects;
@Override
public <E extends BaseModel> List<E> getChildren() {
return ChildSubjects;
}
@Override
public <E extends BaseModel> List<E> createChildList() {
ChildSubjects = new ArrayList<>();
return ChildSubjects;
}
}
在编译时我得到以下错误:
Error:(52, 16) error: incompatible types
required: List<E>
found: ArrayList<Subject>
where E is a type-variable:
E extends BaseModel declared in method <E>getChildren()
和
Error:(58, 16) error: incompatible types
required: List<E>
found: ArrayList<Subject>
where E is a type-variable:
E extends BaseModel declared in method <E>createChildList()
我的错是什么?
答案 0 :(得分:0)
//试试这段代码
public class Subject extends BaseChildParentModel {
//some fields
public ArrayList<Subject> ChildSubjects;
@Override
public <E extends BaseModel> List<E> getChildren() {
return ((E)ChildSubjects);
}
@Override
public <E extends BaseModel> List<E> createChildList() {
ChildSubjects = new ArrayList<>();
return ((E)ChildSubjects);
}
}
在返回数据之前// typecast。 它可能对你有帮助。
答案 1 :(得分:0)
试试这个:
public abstract class Subject extends BaseChildParentModel {
public List<Subject> ChildSubjects;
@Override
public <E extends BaseModel> List<E> getChildren() {
return (List<E>) ChildSubjects;
}
@Override
public <E extends BaseModel> List<E> createChildList() {
ChildSubjects = new ArrayList<>();
return (List<E>) ChildSubjects;
}
}