Método heredado con tipos de retorno no relacionados
-
13-12-2019 - |
Pregunta
Tengo el siguiente fragmento de código
public class Test {
static interface I1 { I1 m(); }
static interface I2 { I2 m(); }
static interface I12 extends I1,I2 { I12 m(); }
public static void main(String [] args) throws Exception {
}
}
Cuando intento compilarlo, tengo error.
Test.java:12: types Test.I2 and Test.I1 are incompatible; both define m(), but with unrelated return types.
¿Cómo evitar esto?
Solución
Como se discutió en Java - Método Nombre Collision en la implementación de la interfaz No puedes hacer esto.
Como solución alternativa, puede crear una clase de adaptador.
Otros consejos
Solo hay un caso en el que esto funcionaría, que se menciona por XAMDE , pero no explicó a fondo.Está relacionado con tipos de retorno de covariante .
En el JDK 5, la covariante regresa, cuando se agrega, y, como tal, el siguiente es un caso válido que compilaría bien y se ejecutará sin problemas.
public interface A {
public CharSequence asText();
}
public interface B {
public String asText();
}
public class C implements A, B {
@Override
public String asText() {
return "C";
}
}
Por lo tanto, lo siguiente se ejecutará sin errores e imprimirá "C" a la salida principal:
A a = new C();
System.out.println(a.asText());
Esto funciona porque la cadena es un subtipo de carsata.
Esta es una error en el compilador Java 6 de Sun .
Tuve el mismo problema y parece estar bien usando el JDK 7 de Oracle.