From Gossip@caterpillar

Java Gossip: ¦Û­q Annotation «¬ºA

±z¥i¥H¦Û­qAnnotation«¬§O¡A¨Ã¨Ï¥Î³o¨Ç¦Û­qªºAnnotation«¬§O¦bµ{¦¡½X¤¤¨Ï¥Î Annotation¡A³o¨ÇAnnotation±N´£¨Ñ¸ê°Tµ¹±zªºµ{¦¡½X¤ÀªR¤u¨ã¡C

­º¥ý¨Ó¬Ý¬Ý¦p¦ó©w¸qMarker Annotation¡A¤]´N¬OAnnotation¦WºÙ¥»¨­§Y´£¨Ñ¸ê°T¡A¹ï©óµ{¦¡¤ÀªR¤u¨ã¨Ó»¡¡A¥D­n¬OÀˬd¬O§_¦³Marker Annotationªº¥X²{¡A¨Ã§@¥X¹ïÀ³ªº°Ê§@¡C

­n©w¸q¤@­ÓAnnotation©Ò»Ýªº°Ê§@¡A´NÃþ¦ü©ó©w¸q¤@­Ó¤¶­±¡]interface¡^¡A¥u¤£¹L±z¨Ï¥Îªº¬O@interface¡A¨Ò¦p©w¸q¤@­Ó Debug Annotation«¬ºA¡G

  • Debug.java
package onlyfun.caterpillar;
public @interface Debug {}

¥Ñ©ó¬O­ÓMarker Annotation¡A©Ò¥H¨S¦³¥ô¦óªº¦¨­û¦bùØÀY¡A½sͧ¹¦¨«á¡A±z´N¥i¥H¦bµ{¦¡½X¤¤¨Ï¥Î³o­ÓAnnotation¤F¡A¨Ò¦p¡G
  • SomeObject.java
package onlyfun.caterpillar;

import java.util.*;

public class SomeObject {

@Debug
public void doSomething() {
// ....
}
}

±µµÛ¨Ó¬Ý¬Ý¦p¦ó©w¸q¤@­ÓSingle-value Annotation¡A¥¦¥u¦³¤@­Ó¦¨­û¡A¦WºÙ¬°value¡A¨Ò¦p±z¥i¥H´£¨ÑDebug Annotation§ó¦h¸ê°T¡G
  • Debug.java
package onlyfun.caterpillar;

public @interface Debug {
String value();
}

¹ê»Ú¤W±z©w¸q¤Fvalue()¤èªk¡A½s;¹¦b½sͮɷ|¦Û°ÊÀ°±z²£¥Í¤@­ÓvalueªºÅܼƦ¨­û¡A±µµÛ¦b¨Ï¥ÎDebug Annotation®É­n«ü©w­È¡A¨Ò¦p¡G
  • SomeObject.java
package onlyfun.caterpillar;

import java.util.*;

public class SomeObject {
@Debug("unit test")
public void doSomething() {
// ....
}
}

@Debug("unit test")¹ê»Ú¤W¬O@Debug(value="unit test")ªºÂ²«K¼gªk¡A¦pªG¬O°}¦C­È¡A¨Ò¦p¡G
  • Debug.java
package onlyfun.caterpillar;

public @interface Debug {
String[] value();
}

«h¨Ï¥ÎAnnotation®É¡A¥i¥H¼g¦¨@Debug({"value1", "value2"})¡A©Î¬O@Debug(value={"value1", "value2"})¡C

±z¤]¥i¥H¹ï¦¨­û³]©w¹w³]­È¡A¨Ï¥ÎdefaultÃöÁä¦r§Y¥i¡A¨Ò¦p¡G

  • Debug.java
package onlyfun.caterpillar;

public @interface Debug {
String value() default "none";
}

³o»ò¤@¨Ó¦pªG±z¨Ï¥Î@Debug®É¨S¦³«ü©w­È¡A«h¹w³]´N¬O"none"¡C

±z¤]¥i¥H¬°Annotation©w¸qÃB¥~ªº¦¨­û¡A¥H´£¨ÑÃB¥~ªº¸ê°Tµ¹¤ÀªR¤u¨ã¡A¨Ò¦p¡G

  • Debug.java
package onlyfun.caterpillar;

public @interface Debug {
public enum Level {NONE, UNIT, INTEGRATION, FUNCTION};

Level level() default Level.NONE;
String name();
String tester();
}

«h±z¥i¥H¦p¤U¨Ï¥Î³o­ÓAnnotation¡G
  • SomeObject.java
package onlyfun.caterpillar;

import java.util.*;

public class SomeObject {
@Debug(
level = Debug.Level.UNIT,
name = "some test",
tester = "justin"
)
public void doSomething() {
// ....
}
}

@interface¹ê»Ú¤W¬O¦Û°ÊÄ~©Ó¦Ûjava.lang.annotation.Annotation¡A©Ò¥H©w¸qAnnotation®É¤£¯àÄ~©Ó¨ä¥¦ Annotation©Î¬Ointerface¡C