Annotation提供了一种为程序元素设置元数据的方法,从某些方面来看,Annotation就像修饰符一样,可以用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明。这些信息被存储在Annotation的“name=value”对中。
一.基本Annotation
5个基本的Annotation如下:
@Override
@Deprecated
@SuppressWarnings
@SafeVarargs(Java7)
@FunctionalInterface(Java8)
1.限定重写父类方法:@Override
@Override只能修饰方法,不能修饰其他程序元素。
2.标示已过时:@Deprecated
@Deprecated用于表示某个程序元素(类,方法等)已过时,当其他程序使用已过时的类,方法时,编译器将会给出警告。
3.抑制编译器警告:@SuppressWarnings
@SuppressWarnings指示被该Annotation修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告。
在通常情况下,如果程序中使用没哟泛型限制的集合将会引起编译器警告,为了避免这种编译器警告,可以使用@SuppressWarnings修饰,下面程序取消了没有使用泛型的编译器警告。
import java.util.ArrayList;
import java.util.List;
// 关闭整个类里的编译器警告
@SuppressWarnings(value="unchecked")
public class SuppressWarningsTest
{
public static void main(String[] args)
{
List<String> myList = new ArrayList(); // ①
}
}
4.Java7的堆污染警告与@SafeVarargs
5.Java8的函数式接口与@FunctionalInterface
Java8 规定,如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口就是函数式接口。
@FunctionalInterface
public interface FunInterface
{
static void foo()
{
System.out.println("foo类方法");
}
default void bar()
{
System.out.println("bar默认方法");
}
void test(); // 只定义一个抽象方法
//此时增加一个抽象方法会导致编译出错的。
void abc();
}
二.JDK的元Annotation
1.使用@Retention
2.使用@Target
3.使用@Documented
4.使用@Inherited