java反射獲取物件的屬性及屬性值
阿新 • • 發佈:2019-01-29
public class InitializeProperty { public static void setEmpty(Object obj) { try { // 獲取實體類的所有屬性,返回Field陣列 Field[] field = obj.getClass().getDeclaredFields(); // 獲取屬性的名字 String[] modelName = new String[field.length]; //獲取屬性的型別 String[] modelType = new String[field.length]; for (int i = 0; i < field.length; i++) { // 獲取屬性的名字 String name = field[i].getName(); modelName[i] = name; // 獲取屬性型別 String type = field[i].getGenericType().toString(); modelType[i] = type; // 設定可以訪問私有變數 field[i].setAccessible(true); // 將屬性的首字母大寫 name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase()); if (type.equals("class java.lang.String")) { // 如果type是類型別,則前面包含"class ",後面跟類名 Method m = obj.getClass().getMethod("get" + name); // 呼叫getter方法獲取屬性值 String value = (String) m.invoke(obj); if (value == null||value.equals("")) { field[i].set(obj, " "); } } if (type.equals("class java.lang.Integer")) { Method m = obj.getClass().getMethod("get" + name); Integer value = (Integer) m.invoke(obj); if (value == null) { field[i].set(obj, 0); } } if (type.equals("class java.lang.Double")) { Method m = obj.getClass().getMethod("get" + name); Double value = (Double) m.invoke(obj); if (value == null) { field[i].set(obj, 0d); } } if(type.equals("class java.lang.Long")){ Method m = obj.getClass().getMethod("get"+name); Long value = (Long) m.invoke(obj); if(value==null){ field[i].set(obj, 0l); } } if (type.equals("class java.util.Date")){ Method m = obj.getClass().getMethod("get" + name); Date value = (Date) m.invoke(obj); if (value == null){ field[i].set(obj, new Date()); } } } } catch (Exception e) { e.printStackTrace(); } } }