一、接口标记场景
@Deprecated
使用场景:标示该接口已过时
阿里规约:外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加 @Deprecated 注解,并清晰地说明采用的新接口或新服务是什么。
@SuppressWarnings
使用场景:对接口内产生的某些警告保持静默,例如可以忽略未使用变量的警告等
@SuppressWarnings("unused")
public void test(){
//忽略list未使用警告
List list = new ArrayList();
}
@SafeVarargs
使用场景:抑制编译器“堆污染”警告,类似@SuppressWarnings("unchecked")注解,忽略类型检查
注意事项:@SafeVarargs注解不适用于非static或非声明的方法,参数必须是可变参数
@SafeVarargs
public static <T> void test(T ...array){
//忽略list无类型检查
List list = new ArrayList();
}
@FunctionalInterface
使用场景:标记接口为函数式接口
注意事项:
- 只能用在接口上
- 有且仅有一个抽象方法
- 可以有静态方法和默认方法
- 可以重写Object中方法,比如equals,toString
@FunctionalInterface
public interface FunctionTest{
//抽象方法
void method();
//默认方法
default void defaultMethod(){
...
}
//静态方法
static void staticMethod(){
...
}
}
二、类场景
@Override
使用场景:重写父类方法
new Thread(){
@Override
public void run() {
...
}
};
@Target
使用场景:用于描述注解的使用范围
主要场景:自定义注解
ElementType:
TYPE:用于描述类、接口、注解、枚举FIELD:用于描述字段、枚举的常量METHOD:用于描述方法PARAMETER:用于描述方法参数CONSTRUCTOR:用于描述构造函数LOCAL_VARIABLE:用于描述局部变量ANNOTATION_TYPE:用于描述注解PACKAGE:用于描述包
@Target(ElementType.TYPE)
public @interface Target{
public String text() default "";
...
}
@Retention
使用场景:指定被修饰的注解可以保留多长时间(生命周期)
主要场景:自定义注解
RetentionPolicy:
SOURCE:只保留在源文件中,编译时注解会被遗弃CLASS(默认值):会保留到class文件,当class文件被Load时会被遗弃RUNTIME:注解不仅被保存到class文件中,Load之后,仍然存在
@Retention(RetentionPolicy.RUNTIME)
public @interface Retention{
...
}
@Documented
使用场景:其修饰的注解会保存到 API 文档中
主要场景:自定义注解
@Inherited
使用场景:其修饰的注解可以被子类所继承
主要场景:自定义注解
@Inherited
public @interface test{
...
}
@test
public Class Parent{
...
}
public Class child extents Patent{
...
}