Les annotations Java sont des méta-informations attachées au code, qui sont utilisées par certains outils pour analyser et utiliser lors de la compilation et de l'exécution, et remplissent la fonction d'explication et de configuration.
Les annotations n'affecteront pas et ne pourront pas affecter la logique réelle du code, elles ne jouent qu'un rôle de soutien. Contenu dans le package java.lang.annotation.
1. Méta-annotation
La méta-annotation fait référence à l'annotation de l'annotation. Il existe quatre types, dont @Retention @Target @Document @Inherited.
1.1. @Retention : Définir la politique de rétention des annotations
Code Java
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得, @Retention(RetentionPolicy.RUNTIME)//注解会在class字节码文件中存在,在运行时可以通过反射获取到
1.2 @Target : Définir le but des annotations
Code Java
@Target(ElementType.TYPE) //接口、类、枚举、注解 @Target(ElementType.FIELD) //字段、枚举的常量 @Target(ElementType.METHOD) //方法 @Target(ElementType.PARAMETER) //方法参数 @Target(ElementType.CONSTRUCTOR) //构造函数 @Target(ElementType.LOCAL_VARIABLE)//局部变量 @Target(ElementType.ANNOTATION_TYPE)//注解 @Target(ElementType.PACKAGE) ///包
ElementType peut avoir plusieurs éléments, et une annotation peut concerner une classe, une méthode, un champ, etc.
1.3 @Document : Indique que l'annotation sera incluse dans javadoc
1.4. les sous-classes peuvent hériter de l'annotation dans la classe parent
Ce qui suit est un exemple d'annotation personnalisée
2 Personnalisation des annotations
Code Java
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface HelloWorld { public String name() default ""; }
3. class
Code Java
public class SayHello { @HelloWorld(name = " 小明 ") public void sayHello(String name) { System.out.println(name + "say hello world!"); }//www.heatpress123.net }
4. Analyser les annotations
Le mécanisme de réflexion de Java peut aider à obtenir des annotations :
Code Java
public class AnnTest { public void parseMethod(Class<?> clazz) { Object obj; try { // 通过默认构造方法创建一个新的对象 obj = clazz.getConstructor(new Class[] {}).newInstance( new Object[] {}); for (Method method : clazz.getDeclaredMethods()) { HelloWorld say = method.getAnnotation(HelloWorld.class); String name = ""; if (say != null) { name = say.name(); System.out.println(name); method.invoke(obj, name); } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { AnnTest t = new AnnTest(); t.parseMethod(SayHello.class); } }Plus de java Pour les articles liés aux solutions d'implémentation d'interfaces d'annotation personnalisées, veuillez faire attention au site Web PHP chinois !