注解(annotation)是J2SE 5.0的新內容,它給我們提供了很好的編程支持,下面介紹一下其內置的三種注解類型:
1. @Override@Override用在多態情況下,比如:
public abstract class Animal{
public void say(){
System.out.println("annimal is saying");
}
}
public class Cat extends Animal{
@Override
public void say(){
System.out.println("miao, miao");
}
}
通過@Override來告訴java編譯器,say方法是重載的父類的方法,這樣,當父類的say方法簽名改名的話,比如增加了一些參數,那么子類的Cat中的say方法編譯時就會報錯,說沒有正確的重載父類方法,所以,@Override可以幫我們驗證程序的正確性,這一點,很有用。
2. @Deprecated
@Deprecated的意思和JavaDoc中的@deprecated注釋在本質上是一樣的,使用如下:
public class DeprecatedExample {?
???@Deprecated?
???public static void badMethod() { }
}
public class DeprecatedUser {?
???public static void main(String[] args){
??????DeprecatedExample.badMethod();?
???}
}
上面的代碼如果用javac進行編譯的話,會打印出如下信息:
Note: DeprecatedUser.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error
如果你按提示重新加-Xlint進行編譯,你就可以得到錯誤的詳細信息:
% javac -Xlint:deprecation
DeprecatedUser.java:3: warning: [deprecation] badMethod() in DeprecatedExample
has been deprecated
DeprecatedExample.badMethod();
需要注意的是:和javadoc中的@deprecated相比,@Deprecated并沒有強大多少,因為它不支持參數,而@deprecated后面還可以跟字符串來給一些相關的信息,但@Deprecated做不到,但它提供了運行時自省的功能,來提示錯誤,所以建議@Deprecated和@deprecated同時使用。
?3. @SuppressWarnings
顧名思義,就是抑制警告信息的出現,使用如下:
public class DeprecatedExample2{?
???@Deprecated?
???public static void foo() { }
}
public class DeprecatedUser2 {?
???@SuppressWarnings(value={"deprecation"})?
???public static void main(String[] args) {?
??????DeprecatedExample2.foo();?
???}
}
上述@SuppressWarnings(value={"deprecation"})的作用就是抑制編譯器報deprecation的錯。
@SuppressWarnings(value={"deprecation"})只支持一個參數,是數組類型,所以你可以不用加value, 寫成:@SuppressWarnings({"deprecation"});當想抑制多個類型的警告信息時,可寫:@SuppressWarnings({"unchecked","fallthrough",deprecation"}).
注意:在JDK1.5.0 release中,@SuppressWarnings還沒有得到完全支持,會在以后支持,但Sun并沒有給出具體的時間。