我正在尝试使用通用方法,因此我不必重复代码。我试过了:
private Listener createListenerAdapter(Class<T> clazz)
{
// do something
}
(clazz
很重要,因为保留了class
。
但Netbeans抱怨说:&#34;找不到符号类T&#34;。
我将要传递一些具有相同方法的不同类。我应该在哪里定义T?
答案 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
}