Java的注解,PDF超过6000页,
2021/12/19 20:55:07
本文主要是介绍Java的注解,PDF超过6000页,,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 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;
这篇关于Java的注解,PDF超过6000页,的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22[开源]10.3K+ Star!轻量强大的开源运维平台,超赞!
- 2024-11-21Flutter基础教程:新手入门指南
- 2024-11-21Flutter跨平台教程:新手入门详解
- 2024-11-21Flutter跨平台教程:新手入门与实践指南
- 2024-11-21Flutter列表组件教程:初学者指南
- 2024-11-21Flutter列表组件教程:新手入门指南
- 2024-11-21Flutter入门教程:初学者必看指南
- 2024-11-21Flutter入门教程:从零开始的Flutter开发指南
- 2024-11-21Flutter升级教程:新手必读的升级指南
- 2024-11-21Flutter升级教程:轻松掌握Flutter版本更新