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?

¿Fue útil?

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.

Tuve el mismo problema y parece estar bien usando el JDK 7 de Oracle.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top