2010-11-22 37 views
0

Mon code est:Java convertir l'objet à la classe comment?

public static Object mylang; 

public static class lang_eng { 
     public static final String x="Refreshing..."; 
} 
public static class lang_de { 
     public static final String x="Refreshing..."; 
} 

...

if (LANG.equals("1")) { 
     mylang=(lang_eng)new Object(); 
    } else { 
     mylang=(lang_de)new Object(); 
    } 

mais quand je fais référence mylang.x, je reçois: "x ne peut pas être résolu ou non un champ"

Quelle est la solution pour ça?

+6

Puis-je vous recommandons d'utiliser le support d'internationalisation de Java? http://download.oracle.com/javase/tutorial/i18n/index.html –

+0

Vous devriez éditer: 'mylang.x alors j'obtiens: "x ne peut pas être résolu ou pas classé"' ce n'est pas le code – Fgblanch

+0

FYI. Le mot "je" est toujours en majuscule en anglais, jamais "je". Des choses comme celles-ci donnent l'impression que vous n'avez rien fait pour répondre à la question et que, avec le temps, vous risquez de voir si vous avez de bonnes réponses. Je l'ai réparé (et la chose Fgblanch se plaignait) pour vous dans ce cas. –

Répondre

7

Ce n'est pas ainsi que fonctionne la programmation orientée objet.

Si vous voulez LangEng (pas que dans Java la convention de nommage standard utilise CamelCase, pas underscore_separation), alors vous devez l'instancier en utilisant new LangEng(). Mais même de cette façon, vous ne serez pas en mesure d'accéder x.

Ce que vous pouvez faire dans ce cas est de définir une interface avec une méthode getX() et laisser les deux langues l'implémenter. Ensuite, vous pouvez avoir Language mylang.

De plus, ce n'est pas une bonne idée d'utiliser cette approche pour i18n. Meilleure utilisation java.util.ResourceBundle

+0

Dans ce cas, vous pouvez définir une interface avec une méthode getX() et laisser les deux langages l'implémenter. Alors vous pouvez avoir Language mylang. -> pouvez-vous montrer un exemple s'il vous plaît? – lacas

+0

@lacas comme je l'ai dit, ce n'est pas un bon choix pour l'utiliser pour i18n. En ce qui concerne les interfaces et d'autres choses - je vous suggère de lire quelques articles sur OOP et Java. c'est un truc basique et tu ne peux pas continuer sans. – Bozho

+0

d'accord, merci – lacas

0

En tant que T.J. Crowder a dit que j'utiliserais le support d'internalisation.

Mais juste au cas où vous avez besoin de fonctionnalités supplémentaires le code devrait être comme:

public static Object mylang; 

if (LANG.equals("1")) { 
    mylang=new lang_eng(); 
} else { 
    mylang=new lang_de(); 
} 

Et quand vous voulez l'utiliser:

if(mylang instanceof lang_eng){ 
    lang_eng langTemp = (lang_eng)mylang; 
    System.out.println(langTemp.x()); 
} 

if(mylang instanceof lang_de){ 
    lang_de langTemp = (lang_de)mylang; 
    System.out.println(langTemp.x()); 
}