2017-01-12 12 views
1

私は識別子と呼ばれるインターフェイスを作成しました。識別子インタフェースを実装するクラスは、MasterEntity beanです。Javaジェネリック - クラス<Interface>

public class MasterEntity implements Identifier{ 

} 

DAOメソッドでは、以下のメソッドシグネチャのようなメソッドを記述しました。

public Identifier getEntity(Class<Identifier> classInstance){ 

} 

ここからサービスから私は以下のようなメソッドを呼び出したいと思います。

dao.getEntity(MasterEntity.class); 

しかし、言ってコンパイルエラーを取得しています -

The method getEntity(Class<Identifiable>) in the type ServiceAccessObject 
is not applicable for the arguments (Class<MasterEntity>) 

私は下のように使用している場合、それは動作します知っています。

public Identifier getEntity(Class classInstance){ 

しかし、それはどのように行うことができるかの種類を特定できる、クラスを指定して?。メソッドを宣言することで

public Identifier getEntity(Class<? extends Identifier> classInstance) 

+1

は< 'クラスを試してみてください? Identifiable> 'を拡張します。 – lexicore

+0

私はあなたの最初の試みが失敗している理由は、タイプ消去と考えています。しかし、クラスの情報を自分のメソッドに渡す必要があると思う理由を説明することはできますか? –

+0

あなたは正しいです。その働き。どうもありがとう。 – Kaushi

答えて

2

変更DAOのメソッドシグネチャあなたは上記のようにのみ適用引数がIdentifier.class自身であることを指定します。 Identifier.classの実装を受け入れるには、generic type boundsを定義する必要があります。

List<? extends Shape>は、制限付きのワイルドカードの例です。 ?は、われわれが先に見たワイルドカードのように、未知の型を表しています。しかし、この場合、この未知の型は実際にはShapeのサブタイプであることがわかります。 (注:Shape自体、またはいくつかのサブクラスかもしれません;文字通りShapeを拡張する必要はありません)Shapeはワイルドカードの上限です。

また、あなたはこの答えを見てみることができます:https://stackoverflow.com/a/897973/1782379

関連する問題