2012-03-19 18 views
0

我有字符串包含類,我需要定義它的名字,我如何用java做這件事?

// this is the name of language class which i need to define it 
String language = "english"; 

我可以把它定義爲:

english eng = new english(); 

但這種方法是固定的名字,但對我來說,字符串「語言」可以更改爲另一個類的名稱,例如下一次可能是因爲:

String language = "french"; 

,所以我需要知道一個動態的方法來定義類「的語言「字符串,使用定義如固定方法加載任何類了:

french eng = new french(); 
+1

這不是「Java之路」,不應該做的,而且有更好的方法來進行這個概念在Java中概述如下。 – 2012-03-19 22:59:56

回答

1
public class Language{ 
    String name; 
    public Language(String name){ 
     this.name=name; 
    } 
} 

來電者:

Language english = new Language("English"); 

但如果你沒有從頭開始與階級已經存在,使用反射。

2

你可以,但你不應該。

快速解決方案是反思。你可以做Class.forName(className)和班級將位於(注意,它也應該包括一個包)

更好的解決方案是提供另一種機制 - 例如,工廠和所有語言通用的接口。:

interface Language { .. } 

public class English implements Language { .. } 
public class French implements Language { .. } 

public class LanguageFactory { 
    private static Map<String, Language> languageRegistry; 
    public static Language createLanguage(String name) { 
     return languageRegistry.get(name); 
    } 
    public synchronized void init() { 
     //populate the registry 
    } 
} 

(註冊表被初始化一次,通過調用.put("english", new English())

+0

我不想使用可變靜態。 – 2012-03-20 01:47:46

+0

它不可變。 t只是懶惰 – Bozho 2012-03-20 06:19:29

+0

它既可變又懶。你怎麼聲稱它不可變? – 2012-03-20 11:47:04

相關問題