Tôi có cấu trúc sau:hiệp biến Return Gõ vào giao diện không biên dịch qua 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 không thành công với thông báo sau:
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
Tuy nhiên, Eclipse có thể biên dịch nó tốt, và như xa như tôi có thể thấy nó nên biên dịch - FooBar của fooBar() phương pháp đáp ứng các hợp đồng của cả hai Foo và Bar của fooBar() phương pháp bằng cách sử dụng lợi nhuận covariant.
Đây có phải là lỗi trong bản dịch Eclipse hay trong javac không? Hoặc là có một cách để thuyết phục javac để biên dịch nó? Để tham khảo các tùy chọn javac của tôi trông giống như sau:
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
Cùng một vấn đề với phiên bản trình biên dịch mở jdk 1.6.0_22. nhưng nó hoạt động trong java7. –
Chỉ cần thử nghiệm nó và có, do đó, nó không - tuyệt vời. –
Có thể [trùng lặp] (http://stackoverflow.com/questions/11343238/java-implementing-multiple-interfaces-with-same-method-and-different-return-ty)? – amaidment