具有未知Bean结构的Java反射方法调用

时间:2015-09-24 04:01:17

标签: java reflection

我写了一些感觉像黑客的代码。

private void handleSpecialCase(Method mvw, InterfacePersistenceBean pObj, AbstractBeanWrapper wrapper, String methodCore)
        throws TestStructureException
{
    try {

        Parameter p= getParameterByName(methodCore, this.PREFIX_SET,pObj);
        Method mp=null;
        try {
            mp = pObj.getClass().getMethod("set"+methodCore, new Class[]
                        { p.getType() });
        }
        catch(NoSuchMethodException e) {
            mp = pObj.getClass().getDeclaredMethod("set"+methodCore, new Class[]
                        { p.getType() });
        }

        Method serviceMethod = beanByIdService.getClass().getMethod("get"+methodCore, new Class[]
                { java.lang.Long.class });

        InterfacePersistenceBean beanToSet=(InterfacePersistenceBean)serviceMethod.invoke(beanByIdService, mvw.invoke(wrapper));
        mp.setAccessible(true);
        mp.invoke(pObj, beanToSet);
    }
    catch (Exception e) {
        SS.getLogger().error(e.getMessage()+" "+e.getCause(),e);
        throw new TestStructureException(e.getMessage(), e.getStackTrace());
    }
  • 内部try块(即getMethod())将从超类获取方法,但不会获得受保护或私有方法。如果某个方法受到保护,则会抛出NoSuchMethodException

  • 因此内部catch块使用getDeclaredMethod(),它将获得受保护和私有方法,但会在超类方法上抛出NoSuchMethodException

  • 一个受保护/私有的超类方法总会在这里抛出异常,这对我的目的来说很好,但仍然不够优雅。

有人可以建议更灵活,更健壮,更优雅的方法(最好不使用注释)吗?

0 个答案:

没有答案