17

ジェネリックメソッドを使用しようとしているので、コードを繰り返す必要はありません。私が試してみました:

private Listener createListenerAdapter(Class<T> clazz)
{ 
   // do something
}

(予約されclazzているため重要ですclass)。

しかし、Netbeansは次のように不平を言っています:「シンボルクラスTが見つかりません」。

同じメソッドを持ついくつかの異なるクラスを渡します。Tをどこで定義するのですか?

4

3 に答える 3

36

メソッドを次のように宣言します。

private <T> Listener createListenerAdapter(Class<T> clazz)

詳細については、Javaチュートリアルを参照してください。

編集:リターンタイプに関連していない場合Tは、ワイルドカードを使用することもできます。

private Listener createListenerAdapter(Class<?> clazz)

編集1:clazzのタイプを表すことを意図している場合はListener、境界を定義して呼び出し元を制限できます(キャストと潜在的なランタイム例外を回避するため)。

private <L extends Listener> L createListenerAdapter(Class<L> clazz)

またはワイルドカードを使用:

private Listener createListenerAdapter(Class<? extends Listener> clazz)

しかし、それはclazz体内でどのように使用されているかに依存します。

于 2012-12-21T19:06:07.293 に答える
4

ジェネリック宣言は、次のようにパラメーター化することにより、メソッドレベルで作成することもできます。

private <T> Listener createListenerAdapter(Class<T> clazz)
{ 
   // do something
}
于 2012-12-21T19:06:14.413 に答える
0

タイプを使用していない場合(可能性は低いですが、生のタイプの警告を回避しようとしている可能性があります):

private Listener createListenerAdapter(Class<?> clazz)
{ 
   // do something, without knowing the T of the clazz
}
于 2012-12-21T19:08:55.510 に答える