作用是告訴編譯器去做什麼,或是不做什麼。
Annotation package:
import java.lang.annotation.*;先來看看它的語法,通常長的像這樣:
@annotation或是這樣:
@annotation(value) @annotation(element=value)Annotation可指定element的值,或是直接傳入值。
它可以針對java的任何元素,
例如package、class、function、member...等進行標註。
像是這樣子:
class smaple{ @Override public function overrideFunc(){ } }那麼Annotation到底有什麼用,
我們來看看內建的幾個annotation。
@Override
告訴編譯器這個方法要覆蓋父類的方法,例如上面的例子就是。
使用Override可以確保程式一定會覆蓋,
而不是變成重載。
@SuppressWarnings
這是告訴編譯器不要發出警告。下面這個程式碼,編譯器會發出falling through warning。
switch("b"){ case "a": break; case "b": //falling through case "c": break; }如果加上@SuperssWarnings annotation就不會發出警告。
@SuppressWarnings private fallingThroughFunc(char x){ switch(x){ case "a": break; case "b": //falling through case "c": break; } }常用的參數有這些:
all
finally
unchecked
serial
fallthrough
path
你可以在命令列下這個指令,查到全部的參數
javac -X
@Deprecated
這個是純粹用來說明的,告知開發者這個元素不建議使用,
請使用新的元素。
@Deprecated public void deprecatedFunc(){ }
meta annotation
meta annotation是註釋的註釋,annotation for annotation,好繞口啊。
@Retention
它告訴編譯器這個annotation的存在時期。下方的例子,是告訴編譯器Deprecated一直到runtime都存在,
表示程式執行期同樣可以存取到。
@Retention(value=RUNTIME) @Deprecated
Retention的參數有這些:
import java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.RetentionPolicy.SOURCE;
import java.lang.annotation.RetentionPolicy.CLASS;
@Inherited
使用Inherited來註釋一個class,那麼它的子class也會繼承這個註釋。
@Documented
製作javadoc時,使用Documented註釋某個annotation,
那麼這個被註釋的annotation會包含在javadoc中。
@Target
Target指明這個annotation可用在哪些元素。import java.lang.annotation.ElementType.*; @Target(ElementType.METHOD) public @interface TargetSample{}表示TargetSample只能用在mehtod。
@Target可以有多個值,像是這樣。
import java.lang.annotation.ElementType.*; @Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD}) public @interface TargetSample{}
沒有留言:
張貼留言