編譯我有以下結構:協變返回類型的接口不通過javac的
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.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可以編譯罰款,據因爲我可以看到它應該編譯--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中工作。 –
只是測試它,是的,所以它 - 很好。 –
可能[重複](http://stackoverflow.com/questions/11343238/java-implementing-multiple-interfaces-with-same-method-and-different-return-ty)? – amaidment