@interface 自定义注解
来源:互联网 发布:长沙网络推广外包 编辑:程序博客网 时间:2024/06/07 09:57
一 前言
最近一直在搭建各种环境,编码写的少了,工作用到自定义注解,记录学习一下
二 Java元注解
在开始自定义注解之前我们需要了解元注解,那什么是元注解呢?
5个字:注解的注解。来帮我们描述定义注解,包括:
//Annotation被保留的时间长短,注解的保留位置@Retention//Annotation所修饰的对象范围 @Target //说明该注解将被包含在javadoc中@Document //说明子类可以继承父类中的该注解@Inherited
他们也有不同的参数用来描述
@Retention :
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target :
@Target(ElementType.TYPE) //接口、类、枚举、注解@Target(ElementType.FIELD) //字段、枚举的常量@Target(ElementType.METHOD) //方法@Target(ElementType.PARAMETER) //方法参数@Target(ElementType.CONSTRUCTOR) //构造函数@Target(ElementType.LOCAL_VARIABLE) //局部变量@Target(ElementType.ANNOTATION_TYPE) //注解@Target(ElementType.PACKAGE) //包
三 定义注解
举个例子:
@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface User { // Permissions value() default Permissions.READ;}
四 测试
1.定义Operator
package annotation;/** * Created by zyb on 2017/12/17. * */public class Operator { public static enum Permissions { /** * 无权限 */ NONE(0), /** * 只读 */ READ(1), /** * 写入 */ WRITE(2), /** * 管理员 */ MANAGE(3); private int permissionsNumber; private Permissions(int permissionsNumber) { this.permissionsNumber = permissionsNumber; } public int getPermissionsNumber() { return permissionsNumber; } public void setPermissionsNumber(int permissionsNumber) { this.permissionsNumber = permissionsNumber; } }}
2.定义User注解
package annotation;import java.lang.annotation.*;import annotation.Operator.Permissions;/** * 用来描述Person权限 * Created by zyb on 2017/12/17. */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface User { Permissions value() default Permissions.READ;}
3.定义Person
package annotation;import annotation.Operator.Permissions;/** * Created by zyb on 2017/12/17. */public class Person { @User(Permissions.NONE) private int permissions0; @User(Permissions.READ) private int permissions1; @User(Permissions.WRITE) private int permissions2; @User(Permissions.MANAGE) private int permissions3; public int getPermissions0() { return permissions0; } public int getPermissions1() { return permissions1; } public int getPermissions2() { return permissions2; } public int getPermissions3() { return permissions3; }}
4.测试CheckPerson
package annotation;import java.lang.reflect.Field;/** * Created by 周昱博 on 2017/12/17. */public class CheckPerson { public static void check(String clas) { try { Class<?> cls = Class.forName(clas); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(User.class) == true) { User user = field.getAnnotation(User.class); System.out.println("User Permissions: " + user.value() + "\nval: "+ user.value().getPermissionsNumber()); } System.out.println(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) { check("annotation.Person"); }}
5.运行结果
阅读全文
0 0
- Java 自定义注解@interface
- 关于@interface 自定义注解
- @interface 自定义注解
- 使用@interface 自定义注解
- java @interface 自定义注解
- java自定义注解 @interface
- 自定义注解 @interface
- @interface 自定义注解
- java之@interface-自定义注解
- 注解:@interface 自定义注解的语法
- @interface自定义注解的实际运用
- 注解 @interface
- (自定义注解)Java注释@interface的用法【转】
- @interface java注解
- @interface 注解 java
- @interface java注解
- Java注解@interface (入门)
- @interface java注解
- Day011
- SSH网上商城1_数据库设计
- AsyncTask源码详解
- (练习)遍历XML文档
- tar命令的详细解释
- @interface 自定义注解
- virtual box启动虚拟机失败 Access denied
- 未能加载文件或程序集“MySql.Web, Version=6.X.X.X, Culture=…
- NYOJ722~数独
- 浅谈IT风投
- 12.16省选训练总结
- 一事无成的loser开始的英语和计算机学习之旅
- BITMAPFILEHEADER、BITMAPINFOHEADER及BMP结构详解
- 搜索添加数据库+清空历史记录