0

実行時にオブジェクトに対して呼び出すメソッドを決定するプログラムを作成したいと考えています。

例えば

 <method>getXyz<operation>
 <arg type="int"> 1 <arg>
 <arg type="float"> 1/0 <arg>

今、XML ファイルに上記のようなものがあり、実行時にどのメソッドを呼び出すかを決定したいと考えています。複数の方法が存在する可能性があります。

コードで次のようなことをしたくありません。

 if (methodNam.equals("getXyz"))
     //call obj.getXyz()

Java リフレクションを使用してそれを行うにはどうすればよいですか?

また、実行時にパラメーター リストを作成したいと考えています。たとえば、あるメソッドは 2 つのパラメーターを取り、別のメソッドはn引数を取ることができます。

4

3 に答える 3

2

リフレクションを使用してクラスメソッドに次のコードを使用できます

package reflectionpackage;
public class My {
    public My() {
    }
   public void myReflectionMethod(){
        System.out.println("My Reflection Method called");
    }
}
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException
{
        Class c=Class.forName("reflectionpackage.My");
        Method m=c.getDeclaredMethod("myReflectionMethod");
        Object t = c.newInstance();
        Object o= m.invoke(t);       
    }
}

これは機能します。詳細については、リンク http://compilr.org/java/call-class-method-using-reflection/をたどってください。

于 2012-12-13T13:39:38.233 に答える
2

最初にオブジェクトObject.getClass()を取得するには、メソッドを使用する必要があります。Class

次に、とを使用Class.getMethod()Class.getDeclaredMethod()てを取得しMethod、最後にを使用Method.invoke()してこのメ​​ソッドを呼び出す必要があります。

例:

public class Tryout {
    public void foo(Integer x) { 
        System.out.println("foo " + x);
    }
    public static void main(String[] args) throws Exception {
        Tryout myObject = new Tryout();
        Class<?> cl = myObject.getClass();
        Method m = cl.getMethod("foo", Integer.class);
        m.invoke(myObject, 5);
    }
}

また、実行時にパラメータリストを作成したいと思います。たとえば、1つのメソッドは2つのパラメータを取り、他のメソッドはn個の引数を取ることができます。

これは問題ではありません。引数の型の配列と、引数の値のsの配列を作成し、それらをとに渡します。これらのメソッドが引数として受け入れ、配列がそれに適合するため、これは機能します。Class<?>ObjectgetMethod()invoke()Class<?>...

于 2012-09-02T08:27:31.093 に答える
-1

とをよく見てjava.beans.Statementくださいjava.beans.Expression。詳細については、こちらをご覧ください。

于 2012-09-02T08:33:32.670 に答える