Question

J'ai l'extrait de code suivant

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

Quand j'essaie de le compiler, j'ai eu une erreur.

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

Comment éviter cela?

Était-ce utile?

La solution

Comme indiqué dans Java - Nom de la méthode Collision dans la mise en œuvre de l'interface Vous ne pouvez pas faire cela.

En tant que solution de contournement, vous pouvez créer une classe d'adaptateur.

Autres conseils

Il n'y a qu'un seul cas dans lequel cela fonctionnerait, qui est mentionné par xamde , mais non expliqué à fond.C'est lié à Types de retour Covariant .

Dans le JDK 5, le covariant revient là où il est ajouté et, en tant que tel, il s'agit d'un cas valide qui compilerait bien et fonctionnerait sans problèmes.

public interface A {
    public CharSequence asText();
}

public interface B {
    public String asText();
}

public class C implements A, B {

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

}

Par conséquent, les suivants seront exécutés sans erreurs et imprimer "C" à la sortie principale:

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

Cela fonctionne parce que la chaîne est un sous-type de charcuternence.

J'ai eu le même problème et cela semble bien en utilisant le JDK 7 de Oracle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top