参考文献:《Java疯狂讲义》(第三版)
知识点:Annotation是一个接口,程序可以通过反射来获取指定程序元素的Annotation对象,然后通过Annotation对象来获取注解里的元数据。
基本Annotation:
1、@Override
2、@Deprecated
3、@SuppressWarnings
4、@SafeVarargs
5、@FunctionalInterface
@Override
限定重写父类方法:强制子类必须覆盖父类的方法。
用途:帮助程序员避免一些低级错误,例如把Apple类中的info方法写成inf(),这样的低级错误有可能会成为后期排错的巨大障碍
注意:只能修饰方法
@Deprecated
标记已过时:表示某个程序元素已过时,当其他程序使用已过时的类、方法时,编译器将会给出警告。
当其它程序使用时编译器会发出警告
@SuppressWarnings
抑制编译器警告:取消显示指定的编译器警告。@SuppressWarinings会一直作用于该程序元素的所有子元素。
“堆污染”警告与@SafeVarargs
堆污染:当一个不带泛型的对象赋给一个带泛型的变量时,往往会发生堆污染
Java7开始,Java7将会更严格的检查,Java编译就会发出警告
使用@SuppressWarnings抑制之歌警告
1、使用@SafaVarargs修饰
2、使用@SuppressWarnings(“unchecked”)修饰
3、使用-Xlint:varargs选项
Java8的函数式接口与@FunctionalInterface
Java8规定:如果接口中只有一个抽象方法。该接口就是函数式接口。@FunctionalInterface就是用来指定某个接口必须是函数式接口。
知识点:
函数式接口就是为Java8的Lambda表达式准备的,Java8允许使用Lambda表达式创建函数式接口的实例,因此Java8专门增加了@FunctionalInterface
作用:告诉编译器检查这个接口,保证该接口只能包含一个抽象方法,否则就会出错。
用途:帮助程序员避免一些低级错误。
@FunctionalInterface只能修饰接口