我有以下结构:
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();
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
但是,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 …Run Code Online (Sandbox Code Playgroud)