[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();
}
```
# 總結
以上都是內置注解,從開發過程中的體驗來講,有也可以,沒有也可以,曉得有這么回事就行了。