非泛型类中的通用方法

12 java generics

我试图使用泛型方法,所以我不必重复代码.我试过了:

private Listener createListenerAdapter(Class<T> clazz)
{ 
   // do something
}
Run Code Online (Sandbox Code Playgroud)

(clazz重要,因为class保留).

但Netbeans抱怨说:"找不到符号类T".

我将要传递一些具有相同方法的不同类.我应该在哪里定义T?

Pau*_*ora 32

将方法声明为:

private <T> Listener createListenerAdapter(Class<T> clazz)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Java教程.

编辑:如果T与返回类型无关,您也可以使用通配符:

private Listener createListenerAdapter(Class<?> clazz)
Run Code Online (Sandbox Code Playgroud)

编辑1:如果clazz要表示一种类型Listener,您可以定义边界来限制调用者(以避免强制转换和潜在的运行时异常):

private <L extends Listener> L createListenerAdapter(Class<L> clazz)
Run Code Online (Sandbox Code Playgroud)

或者使用通配符:

private Listener createListenerAdapter(Class<? extends Listener> clazz)
Run Code Online (Sandbox Code Playgroud)

但这取决于clazz身体的使用方式.