获取躯体属性的值 并获取属性上面是否有你需要的注解(支持继承)
public static List<WorkDeviceRuntime> deviceDataLogValue(Object model, String... properties) throws Exception {
List<Field> proper = new ArrayList<>();
Class<?> tmpClass = model.getClass();
while (tmpClass != null && !tmpClass.getName().toLowerCase().equals("java.lang.object")) {
//当父类为null的时候说明到达了最上层的父类(Object类).
proper.addAll(Arrays.asList(tmpClass.getDeclaredFields()));
//得到父类,然后赋给自己
tmpClass = tmpClass.getSuperclass();
}
List<WorkDeviceRuntime> list = new ArrayList<>();
for (int j = 0; j < proper.size(); j++) { // 遍历所有属性
Field field = proper.get(j);
String name = proper.get(j).getName();
field.setAccessible(true);
for (String propertie : properties) {
if (name.equals(propertie)) {
RealSocketField annotation = field.getAnnotation(RealSocketField.class);
if (null != annotation) {
String devicename = annotation.fieldName();
String deviceunit = annotation.unit();
WorkDeviceRuntime workDeviceRuntime = new WorkDeviceRuntime();
workDeviceRuntime.setLogDeviceValueType(devicename);
workDeviceRuntime.setLogDeviceValueUnit(deviceunit);
//日志参数的值
Object dataValue = field.get(model);
workDeviceRuntime.setDeviceLastValue(Double.valueOf(dataValue + ""));
list.add(workDeviceRuntime);
}
}
}
}
return list;
}
使用反射给属性赋值(支持继承)
public static void ObjToStr(Object model) {
List<Field> proper = new ArrayList<>();
Class<?> tmpClass = model.getClass();
while (tmpClass != null && !tmpClass.getName().toLowerCase().equals("java.lang.object")) {
//当父类为null的时候说明到达了最上层的父类(Object类).
proper.addAll(Arrays.asList(tmpClass.getDeclaredFields()));
//得到父类,然后赋给自己
tmpClass = tmpClass.getSuperclass();
}
try {
for (int j = 0; j < proper.size(); j++) { // 遍历所有属性
Field field = proper.get(j);
field.setAccessible(true);
RealSocketField annotation = field.getAnnotation(RealSocketField.class);
if (null != annotation) {
String unit = annotation.unit();
if (!StringUtils.isEmpty(unit)) {
Object o = field.get(model);
String value = o + " " + unit;
field.set(model, value);
}
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}