[TOC]
# @Override
@Override 用在方法上,表示这个方法重写了父类的方法,如toString()。
如果父类没有这个方法,那么就无法编译通过,如例所示,在fromString()方法上加上@Override 注解,就会失败,因为Hero类的父类Object,并没有fromString方法。
```
package annotation;
public class Hero {
String name;
@Override
public String toString() {
return name;
}
@Override
public String fromString() {
return name;
}
}
```
# @Deprecated
@Deprecated 表示这个方法已经过期,不建议开发者使用。(暗示在将来某个不确定的版本,就有可能会取消掉)
如例所示,开地图这个方法hackMap,被注解为过期,在调用的时候,就会受到提示
```
package annotation;
public class Hero {
String name;
@Deprecated
public void hackMap() {
}
public static void main(String[] args) {
new Hero().hackMap();
}
}
```
# @SuppressWarnings
@SuppressWarnings Suppress英文的意思是抑制的意思,这个注解的用处是忽略警告信息。
比如大家使用集合的时候,有时候为了偷懒,会不写泛型,像这样:
```
List heros = new ArrayList();
```
那么就会导致编译器出现警告,而加上
```
@SuppressWarnings({ "rawtypes", "unused" })
```
就对这些警告进行了抑制,即忽略掉这些警告信息。
@SuppressWarnings 有常见的值,分别对应如下意思
1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告);
2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告
3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
4.path:在类路径、源文件路径等中有不存在的路径时的警告;
5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
6.finally:任何 finally 子句不能正常完成时的警告;
7.rawtypes 泛型类型未指明
8.unused 引用定义了,但是没有被使用
9.all:关于以上所有情况的警告。
```
package annotation;
import java.util.ArrayList;
import java.util.List;
public class Hero {
String name;
@SuppressWarnings({ "rawtypes", "unused" })
public static void main(String[] args) {
List heros = new ArrayList();
}
}
```
# @FunctionalInterface
@FunctionalInterface这是Java1.8 新增的注解,用于约定函数式接口。
函数式接口概念: 如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。函数式接口其存在的意义,主要是配合Lambda 表达式 来使用。
如例所示,AD接口只有一个adAttack方法,那么就可以被注解为@FunctionalInterface,而AP接口有两个方法apAttack()和apAttack2(),那么就不能被注解为函数式接口
AD :
```
package annotation;
@FunctionalInterface
public interface AD {
public void adAttack();
}
```
AP:
```
package annotation;
@FunctionalInterface
public interface AP {
public void adAttack();
public void apAttack2();
}
```
# 总结
以上都是内置注解,从开发过程中的体验来讲,有也可以,没有也可以,晓得有这么回事就行了。