我试图使用泛型方法,所以我不必重复代码.我试过了:
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
身体的使用方式.