2016-12-06 105 views
0

熊在這一個...我有一個小麻煩找到的話來解釋我想做的事情。調用一個方法,但不跟我知道從哪個類

我有26類。每個方法都有相同名稱,返回類型和參數的方法。類名是AWORD(),bWord(),cWord等

的方法接受單個字符作爲參數,並返回字符串[]。

下面的代碼工作,但超長時間,我會有我想要一種不同的方法,每次做到這一點:

if (firstChar == 'a'){aWord word = new aWord(); wordArray = word.returnWordArray();} 
else if (firstChar == 'b'){bWord word = new bWord(); wordArray = word.returnWordArray();} 
    else if (firstChar == 'c'){cWord word = new cWord(); wordArray = word.returnWordArray();} 
    else if (firstChar == 'd'){dWord word = new dWord(); wordArray = word.returnWordArray();} 

理想情況下,我能有這樣的:

String className = char + "Word"; 
className thisClass = new className(); 

String[] stringy = className.returnWordArray(); 

任何想法),我說什麼和b)我怎麼會去這樣做呢?

+0

一個想法是,而無需創建26點的對象,你總是可以讓方法'靜態'。然後你只需要使用類名稱來調用它們。 – Logan

+5

爲什麼選26個班? ONE類26個實例不夠好嗎? –

+1

的【什麼是反思,爲什麼是它有用嗎?]可能的複製(http://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful) –

回答

2

你可以通過反射來實現這一點。

String className = char + "Word"; 
Class c = Class.forName("com.yourWholePackage." + className); 
Object obj = c.newInstance(); // get Instance 
Method method = c.getDeclaredMethod("returnWordArray"); 
String[] stringy = (String[]) method.invoke(obj); 

此外,爲了簡化您的if-else你可以使用switch-case最終不同的格式,如:Factory甚至Inheritance

+1

是的。您仍然需要調用returnWordArray,這可以通過艱難的方式完成(反射),或者更簡單地說,如果所有類都實現了定義該方法的接口。 –

+0

@MauricePerry增加了方法以及 –

+0

好吧,我寧願選擇另一種方法,但它應該完成這項工作。 –

相關問題