2017-10-04 3 views
-2

Considérons que j'ai deux interfaces ayant les mêmes noms de variables et que ce nom de variable est identique à l'un des deux noms d'interfaces.
Par exemple.,Ambiguïté dans la variable d'interface Java

interface Parent1{ 
    public static final String Parent1= "VALUE1"; // Variable Parent1 is same as interface name 
} 
interface Parent2{ 
    public static final String Parent1= "VALUE2"; 
} 

Dites si j'ai une classe qui implémente les deux interfaces ci-dessus et si je dois accéder à la Parent1 variable dans l'interface Parent1, comment puis-je accéder.
Par exemple.,

class Child implements Parent1, Parent2{ 
    void myCode(){ 
    System.out.println(Parent1.Parent1); // Does not compile. Because Parent1(before dot) is considered as variable 
    System.out.println(Parent2.Parent1); // Does compile 
    } 
} 

Je connais les noms de variables ne suit pas la norme. Mais je voulais comprendre comment Java surmonte cette ambiguïté.

Editer:
Les gens disent que ça marche (dans les commentaires). Mais quand je l'exécutaient dit

/Child.java:9: error: reference to Parent1 is ambiguous 
     System.out.println(Parent1.Parent1); // Does not compile. Because Parent1(before dot) is considered as variable 
         ^
    both variable Parent1 in Parent1 and variable Parent1 in Parent2 match 
/Child.java:9: error: cannot find symbol 
     System.out.println(Parent1.Parent1); // Does not compile. Because Parent1(before dot) is considered as variable 
           ^
    symbol: variable Parent1 
    location: variable Parent1 of type String 
2 errors 
+3

Compile bien pour moi. –

+0

il fonctionne où vous faites face à un problème. Il fonctionne – iamsankalp89

+0

Quelle version de Java utilisez-vous et quel compilateur? Aussi ... qui est >> vous << en utilisant @JoeC? –

Répondre

1

Je voudrais vous faire savoir que la façon dont java surmonter cette ambiguïté sur la variable « Paret1 » pendant que vous appelez en référence Parent1. Java obtiendra l'adresse exacte pendant que vous appelez Parent2.Parent1. Mais en raison de l'implémentation des interfaces Parent1, Parent2, la propriété 'Parent1' est considérée comme une propriété ambiguë. Étant donné qu'il s'agit de variables statiques enregistrées dans la zone de méthode à l'intérieur de la JVM. Par conséquent, si vous voulez accéder à cette valeur de variable, vous devez donner une référence exacte au compilateur. pour cela, vous pouvez utiliser la réflexion. comme ci-dessous,

try { 
     Class parent = Class.forName("yourpackage.Parent1"); 
     Field field = parent.getDeclaredField("Parent1"); 
     field.setAccessible(true); 
     Object value = field.get(parent); 
     System.out.println(value); // this will print out the 'Parent1' value 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+1

Cela ressemble juste que vous utilisez Parent1 indépendamment. Comment utiliser à l'intérieur de la classe enfant ne résout pas ce problème. Pour l'utiliser de manière indépendante, vous n'avez pas besoin de réflexion, vous pouvez simplement l'appeler Parent1.Parent1! – nagendra547