Java泛型类型删除方法签名问题

标签 java class generics type-erasure

给定以下假设的类型层次结构:

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/

相关文章:

java - 在屏幕的下半部分显示图像和用户信息

c# - 动态调度系统使用什么算法?

java - 带 Switch 语句的 While 循环

java - 如果字符猜测错误,则打印出一条消息,提示“miss”。刽子手游戏

java - 尝试创建使用 SQL 语句和键返回 ArrayList<T> 的方法

python - 使用 Python 3.6 在运行时获取类的通用类型

java - 如何递减 Java 中的循环

java - 在android studio中调用类函数

c# - .NET MVC——使用一个类作为模型?

c# - 如何在运行时决定将哪种类型作为泛型参数传递?