我正在尝试使用一个通用方法,以便不必重复编写代码。我已经尝试了:
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
}
clazz
是 GWT 中的 GUI 小部件。 - user195488Class<? extends Widget>
是最合适的选择。 - Paul Belloraclazz
上的方法?因此,如果我传递ButtonWidget
,我想能够调用clazz.setEnable(true)
。所有小部件都具有相同的方法调用。我将ButtonWidget
作为createListenerAdapter(myWidget.getClass())
传递。clazz.setEnable(true)
不起作用,因为它认为我正在请求Class<?>
上的方法。 - user195488Class<? extends MySuperClass>
但那并没有给我子类。有几个不同的子类。 - user195488