使用变量作为对象名称来调用对象方法

时间:2013-06-25 19:05:54

标签: java object reflection methods

我有一个包含几个不同对象的类。

我可以使用getDeclaredFields获取所有对象的名称列表, 但我想在这些对象中调用一种方法 我怎么能这样做?

ClassA a = new ClassA();
Class cls = c.getClass();
Field[] fields = cls.getDeclaredFields();
for(int i = 0; i< fields.length;i++) {
   System.out.println("Field = " + fields[i].toString());
   System.out.prontln(fields[i].method()) // how can I call the method from object fields[i]             
}

更多信息:我使用反射的原因是我想编写一个测试类,可以用来测试所有其他类的对象是否正确存在。

testclass(类a),获取类a中的所有对象名,并使用object.exists()方法验证此对象的存在。

这是我的代码:我有一些对话框类,每个对话框类都有一些menuitem类,checkbox类,textfield类,我想写一个类,可用于验证所有checbox,textfields exsting(使用checkbox.exist (),textfield.exist()...)在给定的对话框中。

ToolsMenu c = new ToolsMenu();
        Class cls = c.getClass();
        Field[] fields = cls.getDeclaredFields();
        for(int i = 0; i< fields.length;i++) {
            System.out.println("Field = " + fields[i].toString());
            println( fields[i].getDeclaringClass().exists()

我可以使用getdeclaringclass来获取field [i]类,但是如何调用方法exists(),它在复选框textfields类中定义。

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容进行调用:

...
Class clazz= fields[i].get(c).getClass();
clazz.getMethod("methodName").invoke(fields[i].get(c));
...

其中"methodName"是应该调用的方法的名称。您也可以将一些参数传递给方法。

答案 1 :(得分:2)

我不确定你为什么要使用反射。你可以简单地做

a.field.method()

如果field及其method()声明了正确的访问修饰符。