2016-12-06 112 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

好吧,我宁愿选择另一种方法,但它应该完成这项工作。 –

相关问题