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 回答