2017-05-10 5 views
0

私はJavaジェネリックスの新人ですが、ジェネリッククラスのメンバーにアクセスすることができれば、いくつかの方法で多くのタスクを解決できます。出発点は、私はすべて同様の処理が必要ないくつかのタイプのデータを持っているということです。ジェネリック型のクラスのクラスメンバーにアクセスするには?

次のおもちゃの例のようにジェネリック型のメンバーにアクセスする方法はありますか?

public void <O> someMethod(AbstractData d, Set<String> filter) { 
    List<O> list = d.getKeys(); 
    for (O o : list) { 
     if(filter.contains(o.id)) { // < cannot access member of generic type O 
      doSomeWork(o); 
     } 
    } 
} 

o.idのアクセス以外はすべて動作するようです。

+4

あなたは、 'public void someMethod(...' – litelite

+0

)のようなものであることをjavaに伝える必要があります。もちろん、未加工の型やチェックされていないキャストを扱わないためには、 AbstractDataが提供しているインタフェースを調べるために 'getKeys()'は 'List も返すべきです。 – GhostCat

答えて

1

一般的なクラスでインターフェイスを拡張するのが理想的です。すでにジェネリッククラスのすべてのオブジェクトはIDを持っていることがわかっている場合、Identifiableは同類のものになるだろう<O extends Identifiable宣言:あなたがインターフェイスを拡張する一般的なクラスを持つことができない場合は

public interface Identifiable { 
    int getId(); 
} 

は、リフレクションを使用してみてください。

関連する問題