2016-04-28 2 views
1

私はこのような基本抽象クラスを持っています:コンパイルでジェネリックリスト

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

公共のArrayList を変更してみてくださいChildSubjects。公開リストに ChildSubjects; –

+0

私はそれを変更しますが、同じエラーが発生します。 –

+0

下の私の答えを試してください –

答えて

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; 
    } 
} 
+0

エラーをクリアしてコンパイルすると成功です。しかし、私はチェックされていないキャスト警告を取得します。私は実行時にそれをチェックするためのコードを完成しています。 OKなら、あなたの答えを受け入れます。 –

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); 
    } 
} 

//型キャストは前のデータを返してみてください。 それはあなたの役に立つかもしれません。

関連する問題