2016-04-14 9 views
-2

私はこの2つのクラスを持っています。私は、親クラスから子クラスのfildsで初期化する必要があります。Java Genericsの構文設定ツール

public class A { 

    protected LazyFacade<E> list; 
    protected LazyDataModel<E> model; 
    protected MyObject myObject; 

    protected LazyDataModel<E> buildModel() { 
      lazyModel = new LazyDataModel<E>() { 
       public List<E> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) { 
        List<E> resultList = null; 
        try { 
         setRowCount((int) list.countObjects(myObject, filters)); 
         resultList = list.listObject(myObject, first, pageSize, sortField, sortOrder, filters); 
        } catch (PersistenceException e) { 
        } 
        return resultList; 
       } 
      }; 
     return lazyModel; 
    } 
    //getters setters 
} 

public class B extends A { 

    public B() { 
     this.list = new LazyFacade<OtherClass>(); **//is it correct way to instantiate the list???** 
     this.myObject = getObjectInDataBase(); 
     this.model = buildModel();     **//the model must have the same class of LazyFacade, in this case OtherClass. 
                //How could i do it?** 
    } 
} 
+0

public class A {を変更してみてください? 「E」は何だと思いますか? – SLaks

答えて

0

問題は何public class A<E> {

+0

OKダニエル、しかし、私はクラスAの内部に新しいA を作成したくありません。 私が必要とするのは、サブクラスiのみがパラメータE型を知っているため、サブクラスのフィールドを初期化することです。 this.list = new LazyFacade ();見事に動作します。しかし、私はどのようにサブクラスのモデルフィールドのEパラメータを設定できますか? – ulima69

+0

申し訳ありませんが、質問を理解していない可能性がありますが、私はクラス宣言行にそのジェネリックを含める必要があると思うか、エラーが発生します。また、スーパークラスのフィールドをインスタンス化するには、 'this.model = buildModel();を' this.model = super.buildModel(); 'に変更したい場合があります。 –

+0

Bクラスを に変更してみてください 'public class B extends A { パブリックB(){ this.list =新しいLazyFacade ()。 this.myObject = getObjectInDataBase(); this.model = buildModel(); } } 次のようにBオブジェクトをインスタンス化します。 'B test = new B <>();' –