【发布时间】:2013-06-27 13:25:08
【问题描述】:
我有一个通用类:
public class Widget<COMMAND> {
// ...
}
所以我可以创建它的实例:
Widget<Fizz> fizzWidget = new Widget<Fizz>();
然后我有一个 ABC BaseWidgetProcessor,我想接受任何类型的 Widgets:
public abstract class BaseWidgetProcessor<Widget<COMMAND>> {
public abstract COMMAND process();
}
使用具体的实现:
public abstract class AstroWidgetProcessor<Widget<COMMAND>> {
@Override
public COMMAND process() {
// ...
}
}
等等
问题是,BaseWidgetProcessor:
public abstract class BaseWidgetProcessor<Widget<COMMAND>> {
public abstract COMMAND process();
}
我收到语法错误:
令牌语法错误,结构错位
当我将其更改为:
public abstract class BaseWidgetProcessor<Widget> {
public abstract COMMAND process();
}
错误消失了,但现在我收到编译器警告:
类型参数Widget隐藏了类型Widget
这是怎么回事?!?为什么会出现错误,然后是相应的警告?设置它的正确(语法)方法是什么?
【问题讨论】:
-
哈哈。 Fizzwidget。 “你们这些该死的孩子!滚出我的草坪!哇!Fizzwidget!”
-
对不起大家 - 我做了一个更正
-
试试
public abstract <COMMAND, T extends Widget<COMMAND>> BaseWidget<T>? -
拥有一个常量(通用)参数有什么意义?如果 *WidgetProcessors 总是有 Widget 作为参数,只需去掉 Widget 参数
-
在
class BaseWidgetProcessor<Widget<COMMAND>>中,Widget表示type parameter,而不是class type。