У меня есть базовый абстрактный класс как это:Общий список в абстрактный метод
public abstract class BaseModel {
//some code
}
Я распространив его с другой базы абстрактного класса, как это:
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()
Какова моя вина?
Попробуйте изменить общественное ArrayList ChildSubjects; to public List ChildSubjects; –
Я меняю его, но получаю такую же ошибку. –
Попробуйте мой ответ ниже –