非泛型类中的通用方法

时间:2012-12-21 19:04:40

标签: java generics

我正在尝试使用通用方法,因此我不必重复代码。我试过了:

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

clazz很重要,因为保留了class

但Netbeans抱怨说:&#34;找不到符号类T&#34;。

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

3 个答案:

答案 0 :(得分:31)

将方法声明为:

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

有关详细信息,请参阅Java Tutorials

修改:如果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的使用方式。

答案 1 :(得分:4)

通用声明也可以通过参数化它们在方法级别进行:

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

答案 2 :(得分:0)

如果您没有使用该类型(不太可能,但您可能会尝试避免原始类型警告):

private Listener createListenerAdapter(Class<?> clazz)
{ 
   // do something, without knowing the T of the clazz
}