2010-11-22 7 views
0

私のコードは次のとおりです。...JavaをオブジェクトをClassに変換する方法は?

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(); 
    } 

が、私はmylang.xを参照するとき、私が取得:ソリューションである "X解決できないか、フィールド"

何このため?

+6

私はJavaの国際化サポートを使用することをお勧めすることはできますか? http://download.oracle.com/javase/tutorial/i18n/index.html –

+0

編集する必要があります: 'mylang.x then get: "xは解決できないか、ファイルではありません"'コードではありません – Fgblanch

+0

FYI。 「私」という言葉は常に英語で大文字で、決して「i」ではありません。そのようなことは、あなたが質問に何の努力も払わなかったように見えるので、時間の経過とともに、あなたが良い答えを得るかどうかに影響を与える可能性があります。私はそれを固定しました(そして、Fgblanchがあなたに訴えたもの)。 –

答えて

7

これはオブジェクト指向プログラミングの仕組みではありません。

LangEng(Javaの標準命名規則では、アンダースコア_分離ではなくCamelCaseを使用します)の場合は、new LangEng()を使用してインスタンス化する必要があります。しかし、その方法でさえ、xにアクセスすることはできません。

この場合、できることは、メソッドgetX()でインターフェイスを定義し、両方の言語で実装できるようにすることです。その後、Language mylangを持つことができます。

さらに、i18nではこのアプローチを使用することはお勧めできません。より良い使用java.util.ResourceBundle

+0

この場合、getX()メソッドでインターフェースを定義し、両方の言語でそれを実装できるようにします。それからあなたは言語マイランを持つことができます。 - >あなたはその例を表示できますか? – lacas

+0

@lacas私が言ったように、これをi18nに使うのは良い選択ではありません。インターフェイスやものについては、OOPとJavaについての記事を読んでみることをお勧めします。これは基本的なもので、あなたはそれなしでは続けることができません。 – Bozho

+0

大丈夫、ありがとう – lacas

0

as T.J. Crowderは私が内部化のサポートを使うと言った。

しかし、あなたはいくつかの余分な機能を必要と念のコードは次のようにする必要があります:

public static Object mylang; 

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

そして、あなたはそれを使用する場合:

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()); 
} 
関連する問題