Java注解知识整理

Java注解知识整理

本节主要大致整理一下注解的内容。

定义

1
2
public @interface TestAnnotation {
}

元注解

用来修饰注解的注解,对于这些元注解还是需要牢记

@Retention

这个元注解表示注解的生命周期

分为源码阶段(SOURCE),编译阶段(CLASS)和运行阶段(RUNTIME)

@Documented

非功能性的注解,表示要不要将此注解包含到javadoc中

@Target

表示注解可以标记在什么位置,是类,还是方法还是等等

取值不一一说明

@Inherited

被Inherited修饰的注解标记到class A上,class B继承自class A,那么class B也拥有了此标记。

@Repeatable

被Repeatable修饰的注解表示当前注解可以重复的标记到目标位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotations {

TestAnnotation[] value();
}

@Repeatable(TestAnnotations.class)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface TestAnnotation {

String value() default "";
}

@TestAnnotation(value = "a")
@TestAnnotation(value = "b")
public class User {

}

注解属性

在自定义的注解里面添加属性

1
2
3
4
public @interface TestAnnotation {

String value() default "";
}

这里需要注意的是属性为value时,在使用时可以省略name值,写成@TestAnnotation(“a”)

注解的提取

这里演示被Repeatable修饰后的注解的提取

1
2
3
4
5
6
7
8
9
10
public void test() {
boolean b = User.class.isAnnotationPresent(TestAnnotations.class);
if (b) {
TestAnnotations testAnnotations = User.class.getAnnotation(TestAnnotations.class);
TestAnnotation[] annotations = testAnnotations.value();
for (TestAnnotation t : annotations) {
System.out.println(t.value());
}
}
}

用法

注解就像一个记号一样,思考你的代码在哪些地方需要做一下标记,标记完后再找到具有这些标记的地方,完成业务的处理?

参考

1. Java 注解 (Annotation)你可以这样学

# java

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×