を経由してコンパイルしていない私は、次の構造を有する:共変戻り値の型があるJavac
FooBar.java:2: types Bar and Foo are incompatible; both define fooBar(), but with unrelated return types
public interface FooBar extends Foo, Bar {
^
1 error
しかし、Eclipseは罰金それをコンパイルすることができ、そして限り:
public interface BarReturn {}
public interface FooReturn {}
public interface FooBarReturn extends FooReturn, BarReturn {}
public interface Foo {
FooReturn fooBar();
}
public interface Bar {
BarReturn fooBar();
}
public interface FooBar extends Foo, Bar {
FooBarReturn fooBar();
}
javacは、次のメッセージで失敗しますFooBarのfooBar()メソッドは、共変リターンを使用してFooとBarのfooBar()メソッドの両方の規約を満たしています。
これはEclipseコンパイルまたはjavacのバグですか?あるいはjavacをコンパイルするよう説得する方法はありますか?参考までに私のjavacオプションは次のようになります:
javac -d /tmp/covariant/target/classes -sourcepath /tmp/covariant/src/main/java: /tmp/covariant/src/main/java/Foo.java /tmp/covariant/src/main/java/BarReturn.java /tmp/covariant/src/main/java/FooBarReturn.java /tmp/covariant/src/main/java/Bar.java /tmp/covariant/src/main/java/FooReturn.java /tmp/covariant/src/main/java/FooBar.java -g -nowarn -target 1.6 -source 1.6
open-jdkコンパイラのバージョン1.6.0_22にも同じ問題があります。それはjava7で動作します。 –
ちょうどそれをテストし、はい、そうです - 素晴らしい。 –
可能[duplicate](http://stackoverflow.com/questions/11343238/java-implementing-multiple-interfaces-with-same-method-and-different-return-ty)? – amaidment