被注解@Deprecated標記的程序元素是不鼓勵使用的程序元素,通常是因為它很危險,或者是因為存在更好的替代方案。
除了對象自身引用自己用@Deprecated標記的方法外,其他情況使用@Deprecated注解標記的類型,方法,字段或構造函數時,Java編譯器都會生成deprecation警告。
先看看@Override注解在Java SE中的聲明:
package java.lang; import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; @Documented @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}) public @interface Deprecated { }
由Java源代碼聲明我們了解到:@Deprecated注解,可以應用在很多地方,包括構造函數、字段、本地變量、方法、包、參數和類。
在一個元素被棄用時,也應使用Javadoc @deprecated標記對其進行記錄,如以下示例所示。 在Javadoc注釋和注解中使用@符並非巧合:它們在概念上是相關的。 另請注意,Javadoc標記以小寫d開頭,注解以大寫D開頭。
package org.springmorning.demo.javabase.annotation.pre; import java.util.Date; /** * @author 春晨 * @date 2019/1/21 7:07 * Copyright ©2019 春晨 https://www.cnblogs.com/springmorning/p/10296415.html */ public class DeprecatedAnnotation { /** * @deprecated * 此方法使用了java.util.Date中棄用的Date(String s)構造函數 * * @param date 日期 格式為(YYYYMMDD) * @return Date字符串格式 */ @Deprecated public String convertDate(String date){ return new Date(date).toString(); } }
Java API中有很多地方都使用了@Deprecated注解,例如像上例中使用的java.util.Date類中的方法:
public Date(String s)
大家可以輕易在Java API中找到示例,我這里就不贅述。