当我在Eclipse中编译以下代码时 - 没有任何错误 只有一个警告:
SomeDerivedAbstractClass是原始类型。对泛型类型的引用 SomeDerivedAbstractClass应该参数化
我在最新的Eclipse Indigo(3.7.1)中测试了这段代码 但是当我尝试通过javac编译此代码时出现以下错误:
SomeConcreateClass.java:1: ISomeBaseInterface cannot be inherited with different arguments: <java.lang.Object> and <>
public class SomeConcreateClass
^
1 error
我编译了这个代码起诉Java 5和Java 6.在这两种情况下都有错误 此代码有什么问题?
public class SomeConcreateClass
extends SomeDerivedClass
implements ISomeInterface
{}
class SomeDerivedClass<T>
extends SomeAbstractClass<Object>
implements ISomeInterface
{
}
abstract class SomeAbstractClass<T>
implements ISomeBaseInterface<T>
{
}
interface ISomeInterface extends ISomeBaseInterface<Object>
{}
interface ISomeBaseInterface<T>
{
}
但是下面的代码不能在Eclipse或javac中编译:
public class SomeConcreateClass
extends SomeAbstractClass
implements ISomeInterface
{}
abstract class SomeAbstractClass<T>
implements ISomeBaseInterface<Object>
{}
interface ISomeInterface extends ISomeBaseInterface<Object>
{}
interface ISomeBaseInterface<T>
{}
javac:
SomeConcreateClass.java:1:ISomeBaseInterface不能继承 不同的论点:和&lt;&gt;公共课 SomeConcreateClass ^ 1错误
Eclipse:
接口ISomeBaseInterface不能多次实现 使用不同的参数:ISomeBaseInterface和 ISomeBaseInterface
那么 - 这是Eclipse中的一个错误吗? 它与https://bugs.eclipse.org/bugs/show_bug.cgi?id=81824是一样的错误吗?
更多更新:
此代码编译时javac和Eclipse都没有错误:
public class SomeConcreateClass
extends SomeDerivedClass
implements ISomeInterface
{}
class SomeDerivedClass
extends SomeAbstractClass<Object>
implements ISomeInterface
{}
abstract class SomeAbstractClass<T>
implements ISomeBaseInterface<T>
{}
interface ISomeInterface extends ISomeBaseInterface<Object>
{}
interface ISomeBaseInterface<T>
{}
只有一个区别:SomeDerivedClass没有参数化 我不明白这对ISomeBaseInterface有什么影响。
还有一个更新:
我检查了IntellijIDEA中第一个例子的代码 - 这个IDE显示错误
但我认为它使用不同的编译方法而不是Eclipse。
答案 0 :(得分:1)
东西&LT;&GT;与Something&lt; Object&gt;不同(尽管看起来这似乎是合理的)。
SomeAbstractClass&LT; T&GT;实现ISomeBaseInterface&lt; T&gt;和SomeAbstractClass&lt;&gt;实现ISomeBaseInterface&lt;&gt;因此,当您使用SomeDerivedAbstractClass&lt;&gt; (在SomeConcreateClass中),您要求该类实现ISomeConcreateInterface(即ISomeBaseInterface&lt; Object&gt;)和ISomeBaseInterface&lt;&gt;与此同时,它无法做到。
我想你可能想要使用SomeDerivedAbstractClass&lt;?&gt ;.