2016-12-06 6 views
0

私はこの1つに抱きついている...私は何をしたいのかを説明するのに少し問題がある。メソッドを呼び出すが、クラスがわからない

私は26のクラスを持っています。各メソッドには、同じ名前、戻り値の型およびパラメータを持つメソッドがあります。

これらのメソッドは、1つのcharをパラメータとして受け入れ、String []を返します。クラス名は、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(); 

a)私が話していることと、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

OK、私は他のアプローチを好みましたが、それは仕事をする必要があります。 –

関連する問題