java反射機制實例
阿新 • • 發佈:2018-11-28
etc 進行 int 遍歷 att eval public private code
1.通過數據庫字段反射給對象實例賦值
convertClass.java
/** * 通過反射構造對象 * @param obj * @param rs * @return */ public Object convertClass(Object obj,ResultSet rs) { try { //得到元數據 ResultSetMetaData metaData = rs.getMetaData(); //遍歷元數據 for(int i=0;i<metaData.getColumnCount();i++) { String columName= metaData.getColumnName(i); //轉換駝峰規則 String attributeName = StatUtils.lineToHump(columName); String attributeValue = rs.getObject(columName) != null ? rs.getObject(columName).toString() : ""; //特殊字段對格式進行處理 if(!"".equals(attributeValue)&&"BATCHTIME".equals(columName)) { SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd"); attributeValue = format.format(attributeValue); } StatUtils.setFieldValueByFieldName(obj, attributeName, attributeValue); } } catch (SQLException e) { e.printStackTrace(); }return obj; }
StatUtils.java
public class StatUtils { private static Pattern linePattern = Pattern.compile("_(\\w)"); public static String chgListStrToInStr(String searchName, List<String> searchIds) { if (!StringUtil.isBlank(searchName) && !CollectionUtil.isEmpty(searchIds)) { StringBuffer retStr = new StringBuffer(); for(int i = 0; i < searchIds.size(); ++i) { if (i % 1000 == 0) { if (i == 0) { retStr.append(searchName).append(" in ("); } else { retStr.append(") or ").append(searchName).append(" in ("); } } else { retStr.append(" , "); } retStr.append("‘").append((String)searchIds.get(i)).append("‘"); } retStr.append(")"); return retStr.toString(); } else { return ""; } } /** * 下劃線轉駝峰 * @param str * @return */ public static String lineToHump(String str){ str = str.toLowerCase(); Matcher matcher = linePattern.matcher(str); StringBuffer sb = new StringBuffer(); while(matcher.find()){ matcher.appendReplacement(sb, matcher.group(1).toUpperCase()); } matcher.appendTail(sb); return sb.toString(); } /** * 獲取四舍五入 * @param value * @return */ public static String roundHalfUp(double value, int scaleNum) { String formatStr = addZeroForNum("0.", (scaleNum+2)); DecimalFormat df = new DecimalFormat(formatStr); double result = new BigDecimal(String.valueOf(value)).setScale(scaleNum, BigDecimal.ROUND_HALF_UP).doubleValue(); return df.format(result); } public static String addZeroForNum(String str, int strLength) { int strLen = str.length(); StringBuffer sb = null; while (strLen < strLength) { sb = new StringBuffer(); sb.append(str).append("0");//右補0 str = sb.toString(); strLen = str.length(); } return str; } public static Object setFieldValueByFieldName(Object o, String fieldName, Object fieldValue) { try { Field f = o.getClass().getDeclaredField(fieldName); f.setAccessible(true); try { f.set(o, fieldValue); } catch (IllegalAccessException e) { e.printStackTrace(); } } catch (NoSuchFieldException e) { e.printStackTrace(); } return o; } /** * 根據屬性名獲取屬性值 * * @param fieldName * @param object * @return */ public static Object getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getDeclaredField(fieldName); //設置對象的訪問權限,保證對private的屬性的訪問 field.setAccessible(true); return field.get(object); } catch (Exception e) { e.printStackTrace(); return null; } } public static Map<String, Object> objectToMap(Object obj) throws Exception { if(obj == null){ return null; } Map<String, Object> map = new HashMap<String, Object>(); Field[] declaredFields = obj.getClass().getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; } public static void main(String[] args) { System.out.println(roundHalfUp(0.2000606, 6)); } }
2.通過對象屬性反射給對象賦值
public static Object initObjects(Object obj,ResultSet rs) { Field[] fields = obj.getClass().getDeclaredFields(); for (int i = 0; i <fields.length ; i++) { // 取消屬性的訪問權限控制,即使private屬性也可以進行訪問。 fields[i].setAccessible(true); String fieldName = fields[i].getName(); //轉大寫 String biColumNameString = fieldName.toUpperCase(); String columValue; try { columValue = rs.getObject(biColumNameString) != null ? rs.getObject(biColumNameString).toString() : ""; fields[i].set(obj, columValue); } catch (IllegalAccessException e) { e.printStackTrace(); }catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } return obj; }
java反射機制實例