2012-12-13 65 views
0

如何動態調用Java Bean的方法。如何在For循環中動態調用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; 
} 


哪有我們實現了這種情況?

+0

我認爲已經有使用** Java Reflection **的答案,那麼不需要提供相同的.. :-) – user370305

回答

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

    } 
} 
1

由於Java需要預先限定的方法名稱來執行,因此您不能。它不是一個字符串,所以你可以附加它。

這個問題可以幫助您更好地瞭解Array of function pointers in Java

或者您可以使用Java反射其他推薦 ..

0

您可以使用反射來獲取的方法的列表,並呼籲他們在一個循環,如果這是你的要求。如上所述,您不能在運行時動態地形成方法名稱。

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

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

你必須使用反射:

   MyBean m = new MyBean(); 
      Method[] methods = m.getClass().getMethods(); 
      for(Method methid: methods){ 
       methid.invoke(m, "abc"); 
      } 
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"); 
} 
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); 
}