que tienen la siguiente estructura:covariante Tipo de retorno en la interfaz no compilar a través 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 un error con el siguiente mensaje:
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
Sin embargo, Eclipse puede compilar bien, y en la medida de como puedo ver, debería compilarse: el método fooBar() de FooBar satisface el contrato del método fooBar() de Foo y Bar mediante el uso de retornos covariantes.
¿Es esto un error en la compilación Eclipse o en javac? ¿O hay una forma de convencer a javac para compilarlo? Como referencia, mis opciones de javac son las siguientes:
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
Mismo problema con el compilador de jdk abierto versión 1.6.0_22. pero funciona en java7. –
Acabo de probarlo y sí, así es, genial. –
Posible [duplicado] (http://stackoverflow.com/questions/11343238/java-implementing-multiple-interfaces-with-same-method-and-different-return-ty)? – amaidment