返回<classname> .class而不是在Java中简单地返回<classname>?

时间:2018-09-01 12:27:26

标签: java reflection

我正在尝试使用反射来确定运行时需要调用哪种方法。 我使用下面的代码来实现相同的目的:

    private Method getSetterMethod(Object tempVar, Object genericDTO, String field) {
        Method getterMethod1 = null;

        if(tempVar instanceof String)
            getterMethod1 = genericDTO.getClass().getMethod("set" + field.substring(0, 1).toUpperCase() + field.substring(1), String.class);
        else if(tempVar instanceof Integer)
            getterMethod1 = genericDTO.getClass().getMethod("set" + field.substring(0, 1).toUpperCase() + field.substring(1), Integer.class);
        else if(tempVar instanceof String[])
            getterMethod1 = genericDTO.getClass().getMethod("set" + field.substring(0, 1).toUpperCase() + field.substring(1), String[].class);
        else if(tempVar instanceof Boolean)
            getterMethod1 = genericDTO.getClass().getMethod("set" + field.substring(0, 1).toUpperCase() + field.substring(1), Boolean.class);

        return getterMethod1;

    }
}

根据tempVar做出决定。我希望能够直接从tempVar返回String.class,以便避免多个if-else-if块。 现在,tempVar.getClass()仅返回String。是否有一种方法输出类似于String.class的内容,而不是简单地输出String。

1 个答案:

答案 0 :(得分:1)

你可以做

if (!Arrays.asList(String.class,String[].class, Boolean.class, Integer.class).contains(tempVar.getClass())){
    return null;
} 
return genericDTO.getClass().getMethod("set" + field.substring(0, 1).toUpperCase() + field.substring(1), tempVar.getClass());