java 注解@interface
时间:2019-11-11
本文章向大家介绍java 注解@interface,主要包括java 注解@interface使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
类注解:
package com.cglibs; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 适用类、接口(包括注解类型)或枚举 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface ClassInfo { String value(); }
field属性注解
package com.cglibs; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 适用field属性,也包括enum常量 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface FieldInfo { int[] value(); }
方法注解
package com.cglibs; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 适用方法 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MethodInfo { String name() default "long"; String data(); int age() default 27; }
参数注解
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.cglibs; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface AutoUserModel { boolean value() default true; boolean require() default true; String message() default "user is null"; }
测试类
package com.cglibs; /** * 测试运行时注解 */ @ClassInfo("Test Class") public class RuntimeAnnotation { @FieldInfo(value = {1, 2}) public String fieldInfo = "FiledInfo"; @FieldInfo(value = {10086}) public int i = 100; @MethodInfo(name = "BlueBird", data = "Big") public static String getMethodInfo(@AutoUserModel(value = false,require = true) @AutoPlatformModel String a) { System.out.println("RuntimeAnnotation.getMethodInfo "+a); return RuntimeAnnotation.class.getSimpleName(); } }
运行
package com.cglibs; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; /** * 测试运行时注解 */ public class TestRuntimeAnnotation { /** * 测试运行时注解 */ public static void main(String[] args) { StringBuilder sb = new StringBuilder(); Class<?> cls = RuntimeAnnotation.class; // 获取指定类型的注解 sb.append("Class注解:").append("\n"); ClassInfo classInfo = cls.getAnnotation(ClassInfo.class); if (classInfo != null) { sb.append(Modifier.toString(cls.getModifiers())).append(" ") .append(cls.getSimpleName()).append("\n"); sb.append("注解值: ").append(classInfo.value()).append("\n\n"); } sb.append("Field注解:").append("\n"); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { FieldInfo fieldInfo = field.getAnnotation(FieldInfo.class); if (fieldInfo != null) { sb.append(Modifier.toString(field.getModifiers())).append(" ") .append(field.getType().getSimpleName()).append(" ") .append(field.getName()).append("\n"); sb.append("注解值: ").append(Arrays.toString(fieldInfo.value())).append("\n\n"); } } sb.append("Method注解:").append("\n"); Method[] methods = cls.getDeclaredMethods(); for (Method method : methods) { MethodInfo methodInfo = method.getAnnotation(MethodInfo.class); if (methodInfo != null) { sb.append(Modifier.toString(method.getModifiers())).append(" ") .append(method.getReturnType().getSimpleName()).append(" ") .append(method.getName()).append("\n"); sb.append("注解值: ").append("\n"); sb.append("name: ").append(methodInfo.name()).append("\n"); sb.append("data: ").append(methodInfo.data()).append("\n"); sb.append("age: ").append(methodInfo.age()).append("\n"); Annotation[][] parameterAnnotations = method.getParameterAnnotations(); for (Annotation[] a : parameterAnnotations ) { if (a != null) { for (Annotation b : a ) { if (AutoUserModel.class.isAssignableFrom(b.annotationType())) { AutoUserModel b1 = (AutoUserModel) b; sb.append("找到了 AutoUserModel =").append(b1.value()).append("\n"); } if (AutoPlatformModel.class.isAssignableFrom(b.annotationType())) { AutoPlatformModel b1 = (AutoPlatformModel) b; sb.append("找到了 AutoPlatformModel =").append(b1.value()).append("\n"); } } } } } } System.out.print(sb.toString()); } }
原文地址:https://www.cnblogs.com/bestzhang/p/11836944.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- ProxySQL+Mysql实现数据库读写分离实战
- 打造高逼格、可视化的Docker容器监控系统平台
- 企业面试题|最常问的MySQL面试题集合(一)
- 深入理解消息中间件技术之RabbitMQ服务
- 手把手从0开始教你搭建Jumpserver,为服务器安全保驾护航!
- 企业面试题|最常问的MySQL面试题集合(二)
- 值得一看的35个Redis面试题总结
- 容器技术|Docker三剑客之docker-machine
- 企业面试题|最常问的MySQL面试题集合(三)
- 「微服务架构」API版本控制最佳实践介绍
- 2020年最新字节、阿里、腾讯、爱奇艺等BAT Android社招高频面试题,押题99.98%!
- 使用镜像部署 Hexo 静态页面
- 基于zmq RPC简单C++实现
- App为什么会crash?一篇文章带你探究根本原因 ,事情没有你想得那么简单!
- MySQL 8.0新特性 — 用户管理