注解语法

Wu Jun 2020-01-02 00:43:49
Categories: > > Tags:

1 注解接口

注解是由注解接口来定义的:

modifiers @interface AnnotationName {
	elementDeclaration1
	elementDeclaration2
}

注解接口隐式扩展自 Annotation 接口,无法扩展注解接口。

元素

元素声明

type elementName();
type elementName() default value;
type elementName() = value;

合法元素

元素不能为null

2 注解

每个注解都具有下面这种格式:

@AnnotationName(elementName1=value1, elementName2=value2, ...)

因为注解是由编译器计算而来的,因此,所有元素值必须是编译期常量。

一个项可以有多个注解,如注解作者将其声明为可重复的,则可重复使用同一个注解。

3 注解各类声明

注解可用在:

包、类、接口、方法、构造器、实例域、局部变量、参数变量、类型参数

4 注解类型用法

List<@NonNull String>
@NonNull String[][]
String @NonNull [][]
String[] @NonNull []
Class Warning extends @Localized Message
new @Localized String()
(@Localized String)text
if(text instanceof @Localized String)
public String read() throws @Localized IOException
List<@Localized ? extends Message>
List<? extends @Localized Message>
@Localized Message::getText

5 注解 this

用语法变体显示化接收器参数 this,再注解

public class Point{
    public boolean euqals(@ReadOnly Point this,@ReadOnly other){
        ...
    }
}