ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java的注解,PDF超过6000页,

2021-12-19 18:00:58  阅读:164  来源: 互联网

标签:lang java 6000 import public Java 注解 PDF annotation


  • RetentionPolicy.CLASS :在类加载的时候丢弃。在字节码文件的处理中有用,注解默认使用这种方式
  • RetentionPolicy.RUNTIME :始终不会丢弃。运行期也保留该注解,因此可以使用反射机制读取该注解的信息,我们自定义的注解通常使用这种方式。

@Documented 一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中。

@Target 表示该注解的作用域(用于什么地方)。可用的ElementType参数包括:

  • ElementType.CONSTRUCTOR :用于描述构造器
  • ElementType.FIELD :成员变量、对象、属性(包括enum实例)
  • ElementType.LOCAL_VARIABLE :用于描述局部变量
  • ElementType.METHOD :用于描述方法
  • ElementType.PACKAGE :用于描述包
  • ElementType.PARAMETER :用于描述参数
  • ElementType.TYPE :用于描述类、接口(包括注解类型) 或enum声明

@Inherited 定义该注释和子类的关系。 @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

java7 新添加1个注解:

@SafeVarargs Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。

java8 新添加2个注解:

@FunctionalInterface Java 8 开始支持,标识一个匿名函数或函数式接口。

@Repeatable Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

五、java自定义注解

============

自定义注解类编写的一些规则:

1. Annotation类型定义为@interface,所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口;

2. 参数成员只能用public或默认(default)这两个访问权修饰;

3. 参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组;

4. 要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation对象,因为你除此之外没有别的获取注解对象的方法;

5. 注解也可以没有定义成员,不过这样注解就没啥用了;

6.自定义注解需要使用到元注解;

【自定义注解实例】

水果名称注解接口:FruitName.java

import java.lang.annotation.Documented;

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**

  • 水果名称注解接口

  • 使用“元注解”进行相关声明

*/

@Target(FIELD)//注解的作用域:成员变量、对象、属性(包括enum实例)

@Retention(RUNTIME)//注解的生命周期:始终不会丢弃

@Documented//将注解信息添加在java文档中

public @interface FruitName {

String value() default “”;

}

水果颜色注解接口:FruitColor.java

import java.lang.annotation.Documented;

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**

  • 水果颜色注解接口

*/

@Target(FIELD)

@Retention(RUNTIME)

@Documented

public @interface FruitColor {

/**

  • 颜色枚举

*/

public enum Color{ 红色,绿色};

/**

  • 颜色默认属性

*/

Color fruitColor() default Color.绿色;

}

水果供应者注解接口:FruitProvider.java

import java.lang.annotation.Documented;

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**

  • 水果供应者注解接口

*/

@Target(FIELD)

@Retention(RUNTIME)

@Documented

public @interface FruitProvider {

/**

  • 供应商编号

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

*/

public int id() default -1;

/**

  • 供应商名称

*/

public String name() default “”;

/**

  • 供应商地址

*/

public String address() default “”;

}

注解处理器(反射机制):FruitInfoUtil.java

import java.lang.reflect.Field;

/**

  • 注解处理器(反射机制)

*/

public class FruitInfoUtil {

public static void getFruitInfo(Class<?> clazz){

String strFruitName=“水果名称:”;

String strFruitColor=“水果颜色:”;

String strFruitProvicer=“供应商信息:\r\n”;

Field[] fields = clazz.getDeclaredFields();

for(Field field :fields){

if(field.isAnnotationPresent(FruitName.class)){

FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);

strFruitName=strFruitName+fruitName.value();

System.out.println(strFruitName);

}

else if(field.isAnnotationPresent(FruitColor.class)){

FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);

strFruitColor=strFruitColor+fruitColor.fruitColor().toString();

System.out.println(strFruitColor);

}

else if(field.isAnnotationPresent(FruitProvider.class)){

FruitProvider fruitProvider= (FruitProvider) field.getAnnotation(FruitProvider.class);

strFruitProvicer=strFruitProvicer+“供应商编号:”+fruitProvider.id()+" 供应商名称:"+fruitProvider.name()+" 供应商地址:"+fruitProvider.address();

System.out.println(strFruitProvicer);

}

}

}

}

注解使用实例:Apple.ajva 苹果类

/**

  • 注解使用实例:苹果类

*/

public class Apple {

//测试入口

public static void main(String args[]){

FruitInfoUtil.getFruitInfo(Apple.class);

}

@FruitName(“苹果”)//使用水果名称注解

private String appleName;

@FruitColor(fruitColor= FruitColor.Color.红色)//使用水果颜色注解

private String appleColor;

标签:lang,java,6000,import,public,Java,注解,PDF,annotation
来源: https://blog.csdn.net/m0_65146205/article/details/122027058

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有