【问题标题】:How to dynamically call methods of Java Bean in for loop如何在for循环中动态调用Java Bean的方法
【发布时间】:2012-12-13 10:06:42
【问题描述】:

如何动态调用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;
}


我们怎样才能实现这个场景?

【问题讨论】:

  • 我认为已经有了使用 Java Reflection 的答案,那么无需提供相同的答案.. :-)

标签: java android


【解决方案1】:

示例代码。

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"));
        }

    }
}

【讨论】:

    【解决方案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());
        }
    

    【讨论】:

      【解决方案3】:

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

      这个问题可以帮助你更好地理解Array of function pointers in Java

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

      【讨论】:

        【解决方案4】:

        尝试:

        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");
        
        }
        

        【讨论】:

          【解决方案5】:

          你已经使用反射:

                        MyBean m = new MyBean();
                    Method[] methods =  m.getClass().getMethods();
                    for(Method methid: methods){
                        methid.invoke(m, "abc");
                    }
          

          【讨论】:

            【解决方案6】:

            你可以试试这个:

            Bean b = new Bean();
            for(int i=0;i<2;i++) { 
                String s = (String) Bean.getClass().getMethod("getMethod" + i, String.class).invoke(b, "aaa");
            }
            

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

                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);
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-08-21
                  • 2019-06-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-12-28
                  • 1970-01-01
                  相关资源
                  最近更新 更多