使用反射設置 java實體屬性值


/**
 * 功能描述:實體屬性值設置
 * @author wy
 */
public class ReflectionUtils {
    /**
     * 功能描述:設置實體屬性
     * 參數 : obj 實體對象  | attrName 屬性字段名   | attrValue 屬性字段值
     */
    public static void setBeanAttr(Object obj, String attrName, Object attrValue) {
        // 將屬性名的首字母變為大寫,為執行set/get方法做准備
        String methodName = attrName.substring(0, 1).toUpperCase() + attrName.substring(1);
        Method setMethod = null;
        Method getMethod = null;
        try {
            getMethod = obj.getClass().getMethod("get" + methodName);
            setMethod = obj.getClass().getMethod("set" + methodName, getMethod.getReturnType());
            if (setMethod == null) {
                setMethod = obj.getClass().getSuperclass().getMethod("set" + methodName, getMethod.getReturnType());
            }
            if (setMethod != null)
                setMethod.invoke(obj, converseType(attrValue, getMethod.getReturnType()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能描述:數據類型轉換
     * 參數        param 屬性字段值   | paramClass 屬性字段類型
     */
    public static Object converseType(Object param, Class<?> paramClass) {
        if("java.util.List".equals(paramClass.getName())){
            return Arrays.asList(param);
        }
        //java.util.List  java.util.Set
        // 如果是自定義類型 通過返回值類型 實例化此類 給實例賦值 然后將實例set給引用的對象
        if(!isJavaClass(param.getClass())){
            System.out.println(param.getClass().getSimpleName()+"---------ceshi--------------");
            return param;
        }
        // 基本數據類型
        String paramString = (String) param;
        if (String.class.equals(paramClass))
            return paramString;
        if ((Boolean.TYPE.equals(paramClass)) || (Boolean.class.equals(paramClass)))
            return Boolean.valueOf(paramString);
        if ((Byte.TYPE.equals(paramClass)) || (Byte.class.equals(paramClass)))
            return Byte.valueOf(Byte.parseByte(paramString));
        if ((Short.TYPE.equals(paramClass)) || (Short.class.equals(paramClass)))
            return Short.valueOf(paramString);
        if ((Integer.TYPE.equals(paramClass)) || (Integer.class.equals(paramClass)))
            return Integer.valueOf(Integer.parseInt(paramString));
        if ((Long.TYPE.equals(paramClass)) || (Long.class.equals(paramClass)))
            return Long.valueOf(Long.parseLong(paramString));
        if ((Float.TYPE.equals(paramClass)) || (Float.class.equals(paramClass)))
            return Float.valueOf(Float.parseFloat(paramString));
        if ((Double.TYPE.equals(paramClass)) || (Double.class.equals(paramClass))
                || (Number.class.equals(paramClass))) {
            return Double.valueOf(Double.parseDouble(paramString));
        }
        return paramString;
    }

    public static boolean isJavaClass(Class<?> clz) {
        return clz != null && clz.getClassLoader() == null;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM