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()andClass.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);
    }
}

我也想在运行时构造参数列表。例如,一种方法可以采用 2 个参数,另一种方法可以采用 n 个参数

这不是问题,只需为参数的类型创建数组,以及参数值的数组,并将它们传递给and 。它之所以有效,是因为这些方法接受作为参数,并且数组适合它。Class<?>ObjectgetMethod()invoke()Class<?>...

于 2012-09-02T08:27:31.093 回答
-1

好好看看java.beans.Statementjava.beans.Expression。有关详细信息,请参见此处

于 2012-09-02T08:33:32.670 回答