给定以下假设的类型层次结构:
BaseElement
+ StringElement
+ ....
+ ....
+ BooleanElement
+ ....
+ ....
+ ...
我有一个类接口(interface)的形式:
IBaseElementService createElementService(Class<? extends BaseElement> element);
IBooleanElementService createElementService(Class<? extends BooleanElement> element);
这在 eclipse 3.4 中编译得很好,但在 eclipse 3.6 中就不行了,失败并出现错误:
Method ... has the same erasure createElementService(Class<T>) as another method in this type
我有点不解,为什么它在 eclipse 3.4 下编译,因为类型已被 java 编译器删除。但无论如何,有没有一种优雅的方法可以在不重命名方法的情况下更改它?
谢谢!
编辑:正如多人指出的那样,这似乎是一个 eclipse 3.4 - 3.5 错误。 eclipse bug report (感谢 denis.solonenko 提供的链接!)
如果有人对此错误的技术细节感兴趣,请务必阅读 Paŭlo Ebermann 的帖子,谢谢!
最佳答案
重命名了方法。 (但是为什么你有两个方法?也许第一个应该是唯一的公共(public)方法;它可以检查类类型并转发到 BooleanElement 的第二个方法)
根据当前的语言规范,您的两个方法应该可以编译。见here .我听说在 Java 7 中,这两种方法不能再共存了。不确定理由。
关于Java泛型类型删除方法签名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6518549/