2012-01-05 16 views
0

実行時に提供されるクラスとメソッドの名前に基づいて、メソッドを呼び出す必要がある要件を処理します。実行時に名前とメソッドに基づいてメソッドを呼び出す

私はこれを達成することができる別の方法(好ましいもの)です。私が見ることができる1つの問題は、同じ名前の複数のクラスが存在することがあるため問題が発生することです。

これを行うことができる最善の方法を任意の入力は、あなたがクラスローダに固有のそのパッケージに完全修飾クラス名を使用する必要があり、事前

+0

完全修飾名(パッケージを含む)がありますか? – milan

+0

これはどういうわけか最初のリクエストではありませんでしたが、それが不可能であると思われず、潜在的な競合やその他の動作につながる可能性があります。 –

答えて

3

おかげで私のために非常に参考になります。

Class clazz = Class.forName(packageAndClassName); 
Method method = clazz.getDeclaredMethod(methodName, parameterTypes); 

パラメータタイプを知っている必要があります。それ以外の場合は、パラメータタイプを知っている必要があります。

+0

入力いただきありがとうございます!合意は完全修飾名を使用する必要があります。私は方法を呼び出すためにrefelctionを使用する必要があります。 –

1

私はあなたがリフレクションを使用したいと思うでしょう

+0

同意します!しかし、プロブラムは同じ名前のクラスでした。反射の使用は一歩先です –

1

http://java.sun.com/developer/technicalArticles/ALT/Reflection/を参照してください)あなたはリフレクションを探し思う:

Get the Class object (Class.forName) 
From the Class, lookup the Method you want (class.getDeclaredMethod) 
Call the method (method.invoke) 
+0

入力を感謝します! –

1

クラスは、あなたが修飾された名前を持っている:http://java.sun.com/developer/technicalArticles/ALT/Reflection/

擬似コードは次のようになりますこれらの "同じ名前の複数のクラス"を防ぐために使用できます。修飾された名前は "com.example.ExampleClass"、非修飾名は "ExampleClass"となります。 Class.getName()で修飾名を取得できます。

方法については、 リフレクション(http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html)を参照できます。関数を呼び出すには、java.lang.reflect.Methodでinvokeを使用します。

関連する問題