2011-12-08 8 views
3

Eclipseで次のコードをコンパイルすると、エラーはありません。
唯一の警告があります:異なる引数でISomeBaseInterfaceを継承することはできません:<java.lang.Object>と<>

SomeDerivedAbstractClassが生タイプです。ジェネリック型への参照が SomeDerivedAbstractClassが

パラメータ化する必要があります私は、最新のEclipseインディゴ(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は 異なる引数を継承することはできません:および<>パブリッククラス SomeConcreateClass ^ 1エラー

のEclipse:

インタフェースISomeBaseInterfaceが一度 異なる引数を持つよりも多くを実装することはできません。ISomeBaseInterfaceと ISomeBaseInterface

そうは - それは、Eclipseのバグですか?
https://bugs.eclipse.org/bugs/show_bug.cgi?id=81824と同じバグですか?

ONE MORE UPDATE:
このコードは、エラーなしで両方の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にどのように影響するのか分かりません。

AND ONE MORE UPDATE:
私はIntellijIDEAの最初の例からコードをチェックする - このIDEはエラーを示しています。
しかし、私はそれがEclipseよりもコンパイルのために異なるアプローチを使用していると思います。

+2

使用しているEclipseのバージョンは何ですか? Eclipseの古いバージョン(https://bugs.eclipse.org/bugs/show_bug.cgi?id=81824 – Gnat

+0

MyEclipse 7.5とEclipse Galileo)でこれをコンパイルできるバグがありました。 –

+0

最新のEclipse Indigo(3.7.1)をダウンロードしました。このコードはエラーなしでコンパイルされます。 –

答えて

1

何か< >は、何か<オブジェクト>と同じではありません(これは妥当なようですが)。

SomeAbstractClass <T>がISomeBaseInterface <T>を実装し、SomeAbstractClass < >あなたは(SomeConcreateClass中)SomeDerivedAbstractClass < >を使用する場合ISomeBaseInterface < >だから、あなたがISomeConcreateInterface(つまり、ISomeBaseInterface <の両方を実装するクラスを求めている実装オブジェクト>)とISomeBaseInterface < >を同時に実行することはできません。

SomeDerivedAbstractClass <を使用しますか? >、と思います。

+0

"PublicクラスSomeConcreateClass extends SomeDerivedAbstractClass "がISomeInterfaceを実装してコンパイルすることができます。それは生の型として残すのではなく、SomeDerivedAbstractClassを指定する必要があるようです。 – Gnat

+0

コードを少し掃除しました。今はずっと短くなっています。現在、ISomeOtherInterfaceはありません。 –

+0

もう1つの例で質問を更新しました。 –

関連する問題

 関連する問題