0

How to dynamically call methods of Java Bean.

I have the following methods in a class of Java:

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

} 

I need to access these methods from for loop like the below:

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


How can we achieve this scenario ?

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

次のように試してください:

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

Java は、実行するために事前に修飾されたメソッド名を必要とするため、できません。文字列ではないので、追加できます。

この質問は、Java の関数ポインタの配列をよりよく理解するのに役立ちます

または、Java Reflection をその他の提案として使用できます

于 2012-12-13T10:08:50.247 に答える
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 に答える