我有这个代码:
public static final <TypeVO extends BaseVo> List<SelectItem> populateSelectBoxForType(
final Class<TypeVO> voClass, final String fieldName) {
List<SelectItem> listSelectBox = null;
final List<TypeVO> vosList = GenericEjbProxyFactory
.getGenericTopValueObjectProxy(voClass)
.getAllValueObjects(null);
System.out.println("loaded vosList!!!!");
if (vosList != null) {
listSelectBox = new ArrayList<SelectItem>();
for (final TypeVO currVo : vosList) {
listSelectBox.add(new SelectItem(currVo.getInternalId(), currVo.getName()));
}
}
return listSelectBox;
}
如您在此处看到的,我正在使用currVo.getName,因为currVo始终具有name属性。
我希望也可以使用此currVo中其他类型为voClass的字段,但是并不是所有的currVo类都包含该字段,因此我必须使用反射来标识这些getField方法,例如:
for (final TypeVO currVo : vosList) {
for (final Method m : voClass.getMethods()) {
if (m.getName().contains(fieldName)) {
listSelectBox.add(new SelectItem(
currVo.getInternalId(), currVo.m));
}
}
}
我不知道的是,当我找到特定方法的值时该如何使用它,就像currVo.getName一样(因为 currVo.m当然是错误)?
例如:如果fieldName是“Age”,我想在列表中输入:
currVo.getAge()
...我在这里被屏蔽了... 最佳答案
m.invoke(currVo);
另请参阅:
Method
javadoc 还要注意Nik和Bohemian建议的寻找方法的正确方法。