反射

2020-04-07  本文已影响0人  青丝如梦

使用反射获取字段注解、字段值

public class TestBo implements Serializable, Cloneable {

    @Remark("名称")
    private String name;
    @Remark("年龄")
    private String age;
}
    /**
     * 参数验证,提取@Remark.value
     *
     * @param obj obj
     * @return 抽取字段,用','隔开
     */
    private static String extractFields(Object obj) {
        Class<?> clazz = obj.getClass();
        Field[] declaredFields = clazz.getDeclaredFields();
        if (declaredFields.length == 0) {
            throw new RuntimeException("空对象");
        }

        StringBuilder fieldsSb = new StringBuilder();
        Class<Remark> remarkClass = Remark.class;
        for (Field field : declaredFields) {
            field.setAccessible(true);
            boolean annotationPresent = field.isAnnotationPresent(remarkClass);
            if (!annotationPresent) {
                throw new RuntimeException(field + "字段缺少@Remark注解");
            }
            Object fieldValue;
            try {
                fieldValue = field.get(obj);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(field + "获取字段值异常");
            }
            fieldsSb.append(field.getAnnotation(remarkClass).value()).append(":").append(fieldValue).append(",");
        }
        return fieldsSb.toString().substring(0, fieldsSb.length() - 1);
    }
上一篇 下一篇

猜你喜欢

热点阅读