我正在尝试使用通用方法,因此我不必重复代码。我努力了:
private Listener createListenerAdapter(Class<T> clazz)
{
// do something
}
(clazz
很重要,因为class
是保留的)。
但是 Netbeans 抱怨说:“找不到符号类 T”。
我将传入几个具有相同方法的不同类。我应该在哪里定义T?
将方法声明为:
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
体内的使用方式。
泛型声明也可以在方法级别通过参数化它们来进行,如下所示:
private <T> Listener createListenerAdapter(Class<T> clazz)
{
// do something
}
如果您不使用该类型(不太可能,但您可能试图避免原始类型警告):
private Listener createListenerAdapter(Class<?> clazz)
{
// do something, without knowing the T of the clazz
}