0

如何动态调用 Java Bean 的方法。

我在一个Java类中有以下方法:

public class Bean {
   public String column1val;
   public String column2val;
   public String column2val;

} 

我需要从 for 循环中访问这些方法,如下所示:

for(int i=0;i<2;i++) { 
    String s = Bean.get column+i+val;
}


我们怎样才能实现这种情况?

4

8 回答 8

2

嗨,您可以 为此目的使用Java 反射...

   //Obtain the Class instance
    Class beanClass = Bean.class;

    //Get the methods
    Method[] methods = beanClass.getMethods();

    //Loop through the methods and print out their names
    for (Method method : methods) {
        System.out.println(method.getName());
    }
于 2012-12-13T10:12:03.293 回答
2

示例代码。

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Bean {
    public String getMethod1(String a) {
        return a;
    }

    public String getMethod2(String a) {
        return a;
    }

    public static void main(String[] args) throws SecurityException,
            NoSuchMethodException, IllegalArgumentException,
            IllegalAccessException, InvocationTargetException {
        Bean bean = new Bean();
        for (int i = 1; i <= 2; i++) {
            Method method = Bean.class.getMethod("getMethod" + i, String.class);
            System.out.println(method.invoke(bean, "Simple"));
        }

    }
}
于 2012-12-13T10:16:31.740 回答
1

您不能因为 Java 需要预先限定的方法名称来执行。它不是字符串,因此您可以附加它。

这个问题可以帮助您更好地理解Java 中的函数指针数组

或者您可以使用 Java 反射作为其他建议..

于 2012-12-13T10:08:50.247 回答
1

尝试:

Bean beanobj=new Bean();
for(int i=0;i<2;i++) { 

   Method method= beanobj.getClass().getMethod("getMethod"+
                                   String.valueOf(i), new Class[]{});
    String s=(String)method.invoke(beanobj,"aaa");

}
于 2012-12-13T10:11:46.647 回答
1

你有使用反射:

              MyBean m = new MyBean();
          Method[] methods =  m.getClass().getMethods();
          for(Method methid: methods){
              methid.invoke(m, "abc");
          }
于 2012-12-13T10:14:32.413 回答
1

你可以试试这个:

Bean b = new Bean();
for(int i=0;i<2;i++) { 
    String s = (String) Bean.getClass().getMethod("getMethod" + i, String.class).invoke(b, "aaa");
}
于 2012-12-13T10:15:41.720 回答
0

如果这是您的要求,您可以使用反射来获取方法列表并在循环中调用它们。如上所述,您不能在运行时动态形成方法名称。

于 2012-12-13T10:11:33.727 回答
0

使用反射是可能的-但这并不是调用方法的好方法-

Class<Bean> class1 =Bean.class;
for(int i=1;i<=2;i++) { 
    Method s = class1.getMethod("getMethod"+i, String.class);
    Object invoke = s.invoke(new Bean(),"Str");
    System.out.println(invoke);
}
于 2012-12-13T10:16:26.463 回答