我有这个代码:

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建议的寻找方法的正确方法。

    07-24 22:30