2013-09-26 37 views
0

这是我的情况,我不知道它是否可能, 我需要一些想法。如何返回getter方法匹配使用java的字符串反射

我有我的MasterTable对象填充数据

MasterTable MT; //already with data 

的方法

List<String> mymethods = new ArrayList<String>(); 
mymethods.add("getName"); 
mymethods.add("getLocation"); 

和我有一个数组MasterTable方法列表,

Class<MasterTable> masterclass = MasterTable.class; 
Method[] masterMethods = masterclass.getMethods(); 

我想要的是通过MasterTable方法循环,​​当我找到masterMethod匹配我的标准,然后我打印值fo那个方法。

例如

for (Method mm : masterMethods) { 
if(mymethods.contains(mm.getName)){ 
     //print method matching MT.get Method Matching mm.getName 
     System.out.println("print MT.getMethodMatchingmm.getName()"); 
} 
} 

可以做到这一点吗?

回答

1

当然!

if (mymethods.contains(mm.getName()) { 
    Object result = mm.invoke(MT); 
    // do anything with result 
} 

我试过它倒过来,以避免重载方法不想要的比赛:

public static void callGetters(Object instance, String... names) 
     throws Exception { 
    for (String name : names) { 
     Method method = instance.getClass().getMethod(name); 
     System.out.println(name + ": " + method.invoke(instance)); 
    } 
} 

/** 
* @param args 
*/ 
public static void main(String[] args) throws Exception { 
    callGetters(new MyObject(), "getName", "getLocation"); 
} 
+0

正在到 java.lang.IllegalArgumentException异常:错误的参数数目 – user2810119

+0

OK,那么您必须将您的参数添加到调用中以调用:mm.invoke(MT,arg1,arg2,...);我想,你的主要方法只是getter! – isnot2bad

+0

是的,他们是getter,它是一个java bean,我想要获取在setter方法中设置的值。 – user2810119

相关问题