假设有以下类型层次结构:
BaseElement
+ StringElement
+ ....
+ ....
+ BooleanElement
+ ....
+ ....
+ ...
我有一个类接口,格式如下:
IBaseElementService createElementService(Class<? extends BaseElement> element);
IBooleanElementService createElementService(Class<? extends BooleanElement> element);
这在Eclipse3.4中编译得很好,但在Eclipse3.6中不再编译,失败时出现错误:
Method ... has the same erasure createElementService(Class<T>) as another method in this type
我有点困惑,既然Java编译器删除了类型,为什么要在Eclipse3.4下编译。但不管怎样,有没有一种优雅的方法可以在不重新命名方法的情况下改变这种情况?
谢谢!
编辑:正如很多人指出的,这似乎是一个Eclipse3.4-3.5错误。eclipse bug report(感谢denis.solonenko的链接!)
如果有人对这个bug的技术细节感兴趣,一定要阅读pa_lo eberman的帖子,thx!
最佳答案
重命名了方法。(但你为什么有两种方法?可能第一个方法应该是唯一的公共方法;它可以检查类类型并转发给booleannement的第二个方法)
根据当前的语言规范,应该编译两个方法。见here。我在Java 7中听说这样的2种方法已经不能共存了。不确定理由。
关于java - Java泛型类型删除方法签名问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6518549/