Domanda

Ho il seguente snippet di codice

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 {
    }
}
.

Quando provo a compilarlo ho avuto errore.

.
Test.java:12: types Test.I2 and Test.I1 are incompatible; both define m(), but with unrelated return types.
.

Come evitare questo?

È stato utile?

Soluzione

Come discusso in Java - Metodo Nome Collisione nell'implementazione dell'interfaccia Non puoi farlo.

Come soluzione alternativa, è possibile creare una classe adattatore.

Altri suggerimenti

C'è solo un caso in cui questo funzionerebbe, che è menzionato da xamde , ma non spiegato completamente.È correlato a Tipi di ritorno Covariant .

Nel JDK 5 il Covariant ritorna dove aggiunto, e in quanto tale è un caso valido che si compilerebbe bene ed eseguire senza problemi.

public interface A {
    public CharSequence asText();
}

public interface B {
    public String asText();
}

public class C implements A, B {

    @Override
    public String asText() {
        return "C";
    }

}
.

Pertanto, il seguente funzionerà senza errori e stampa "C" all'uscita principale:

A a = new C();
System.out.println(a.asText());
.

funziona perché la stringa è un sottotipo di a pagamento.

Ho avuto lo stesso problema e sembra andare bene usando il JDK 7 da Oracle.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top