2010-11-22 117 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 – 2010-11-22 11:33:23

+0

你應該編輯:'mylang.x然後我得到:「x無法解析或不是一個字段」'它不是代碼 – Fgblanch 2010-11-22 11:33:38

+0

FYI。 「我」一詞總是用英文大寫,從不「我」。像這樣的事情看起來好像你沒有爲這個問題付出任何努力,所以隨着時間的推移,可能會影響你是否得到了好的答案。在這種情況下,我已經修復了它(和Fgblanch的抱怨)。 – 2010-11-22 11:38:48

回答

7

這不是面向對象編程的工作方式。

如果你想LangEng(不是Java中的標準命名約定使用CamelCase,而不是underscore_separation),那麼你必須使用new LangEng()實例化它。但即使如此,你將無法訪問x

在這種情況下你可以做的是用方法getX()定義一個接口並讓兩種語言都實現它。那麼你可以有Language mylang

更重要的是 - 對i18n使用這種方法並不是一個好主意。更好地使用java.util.ResourceBundle

+0

在這種情況下你可以做的是用getX()方法定義一個接口,並讓兩種語言都實現它。然後你可以有語言mylang。 - >你能舉個例子嗎? – lacas 2010-11-22 13:18:24

+0

@ lacas正如我所說,使用i18n並不是一個好的選擇。至於接口和東西 - 我建議你閱讀一些關於OOP和Java的文章。這是基本的東西,沒有它就不能繼續下去。 – Bozho 2010-11-22 13:21:39

+0

好的,謝謝 – lacas 2010-11-22 13:48:03

0

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