2010-11-22 115 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()); 
}