Java—自定义注解及使用

注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”,注解则可以被编译器打包进入class文件,因此,注解是一种用作标注的“元数据”。注解本身对代码逻辑没有任何影响,如何使用注解由注解解析工具决定(读注解、自定义逻辑)

元注解:用来修饰注解的注解

一、@Target() : 定义注解应用于哪些位置

 	类或接口:ElementType.TYPE;
	字段:ElementType.FIELD;
	方法:ElementType.METHOD;
	构造方法:ElementType.CONSTRUCTOR;
	方法参数:ElementType.PARAMETER。

二、@Retention:定义注解的生命周期,如果不定义则默认为RetentionPolicy.CLASS

 仅编译期:RetentionPolicy.SOURCE;
 仅class文件:RetentionPolicy.CLASS;
 运行期(自定义注解使用时常用):RetentionPolicy.RUNTIME。

三、@Inherited:当注解定义在类上时(Target = ElementType.TYPE),子类是否可以继承父类的注解(父类有注解,相当于子类也有了),不支持接口继承

四、@Documented:在生成javadoc的时候会把注解显示出来,不加不会显示

五:@Repeatable():定义注解是否可以在同一地方使用多次(jdk1.8新增)

/**
 * 用@interface定义注解
 * 用元注解来修饰注解
 * 没特殊需求正常只需要用@Target 和 @Retention来修饰自定义的注解
 */
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Fields.class)
@Inherited
@Documented
public @interface Field {
    String value() default ""; // 没有默认值 default 则必填
}

/**
 * @Repeatable 注解的使用, Fields注解的作用域必须大于或者等于 Field注解作用域
 */
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@interface Fields {
    Field[] value();
}

自定义注解:通过元注解修饰自定义的注解,通过反射读取注解,实现想要的功能。

注解:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Field {
    String value() default "";
}

读取注解:

public class User {

    @Field(value = "zqq")
    private String name;

    @Field(value = "18")
    private Integer age;

    private String sex;

    public static void main(String[] args) {
        User user = new User();
        Class c = user.getClass();
        Arrays.stream(c.getDeclaredFields()).forEach(f ->{
            //f.isAnnotationPresent(Field.class)判断是否有注解,f.getAnnotation(Field.class).value()获取注解的值
            if(f.isAnnotationPresent(Field.class)) System.out.println("字段:" + f.getName() + "有注解。注解值为:" + f.getAnnotation(Field.class).value());
        });
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值