源代码 下载---不存在 不要积分。。
https://download.csdn.net/download/drsbbbl/11387917
自己现在个功能 当在一个类添加一个注解,当这个类没有get或者set方法时候,给与一定的警告:
对应的目录结构
对应的注解:
参数 解释下:
@Target({ElementType.TYPE}) 生成可以在什么地方添加注解 type
@Documented 生成到javadoc 可以不写
@Retention(RetentionPolicy.RUNTIME) 在什么时候 验证注解
对应的枚举类型
main 函数
读取到 包下面的所有类:
验证注解的逻辑
public static void isAnnotation(Class<?> clzz) {
//查看对应的类 是否存在 注解 查看 是否存在某个 注解类
boolean flag=clzz.isAnnotationPresent(TestSuppert.class);
//存在了 进行 注解的操作
if(flag) {
// TestSuppert
TestSuppert annotation = clzz.getAnnotation(TestSuppert.class);
//获得 对应的forName
String forName = annotation.forName();
System.out.println(forName);
//获得对应的 枚举类
ArticleTypeEnum values = annotation.values();
int code = values.code();
//获得对应的枚举 值
System.out.println(code);
//根据不同的枚举对象 设置不同的操作
switch (values) {
case DUBBO:
System.out.println("你的 注解的值为 Doubbox"+ArticleTypeEnum.find(code));
break;
case JAVA:
System.out.println("你的 注解的值为 JAVA"+ArticleTypeEnum.find(code));
break;
case SPRING:
System.out.println("你的 注解的值为 SPRING"+ArticleTypeEnum.find(code));
break;
case MYBATIS:
System.out.println("你的 注解的值为 MYBATIS"+ArticleTypeEnum.find(code));
break;
}
if("test".equals(forName)) {
//只有使用了test 开始进行操作
//获得所有的字段
Field[] declaredFields = clzz.getDeclaredFields();
for (Field field : declaredFields) {
//忽略访问修饰符
field.setAccessible(true);
//获得对应的名字
String name = field.getName();
//然后把名字生成对应的方式看是否存在对应的方法 当不存在对应的get 和 set 时候 输出一条警告
String setMethodName="set"+name.substring(0, 1).toUpperCase()+name.substring(1);
String getMethodName="get"+name.substring(0, 1).toUpperCase()+name.substring(1);
System.out.println(getMethodName);
System.out.println(setMethodName);
try {
Method method = clzz.getMethod(setMethodName, field.getType());
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
//未找到 set 和get方法 进行警告操作
System.err.println(field.getName()+"属性 没有对应的set 方法");
//e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Method method = clzz.getMethod(getMethodName, field.getType());
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
System.err.println(field.getName()+"属性 没有对应的get 方法");
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
结果如图: