1. 程式人生 > 其它 >Java動態呼叫實體的get方法

Java動態呼叫實體的get方法

    /**
    * 動態呼叫實體的get方法(注意返回值)
    * @param dto 實體
    * @param name  動態拼接欄位
    * @return {@link String}
    * @date 2021/10/26 11:06
    * @version 1.0.0 <br/>
    **/
    public static String getValue(Object dto, String name) {
        String val = "無資料";
        try {
            if (StringUtils.isEmpty(name)) return val;
            Method m = dto.getClass().getMethod(("get" + toUpperCase4Index(name)));
            // 呼叫getter方法獲取屬性值
            //java.sql.Timestamp型別轉換
            if (m.getGenericReturnType().equals(java.sql.Timestamp.class)){
                String format = DateUtil.format(DateUtil.timeToDate((Timestamp) m.invoke(dto)), DateUtil.YMD_DASH_WITH_TIME);
                val = null == format ? "無資料": format;
            //java.util.Date型別轉換
            }else if (m.getGenericReturnType().equals(java.util.Date.class)){
                String format = DateUtil.format((Date) m.invoke(dto), DateUtil.YMD_DASH_WITH_TIME);
                val = null == format ? "無資料": format;
            }else {
                val = StringUtils.isNotEmpty((String)m.invoke(dto)) ? (String)m.invoke(dto) : "無資料";
            }
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
        return val;
    }