注解与反射初入门(基本案例)

反射中一个重要的类:Field

Field简介:
Field是位于Java.lang.reflect包下的一个类
Java中我们可使用反射获取Field对象
获取Field类对象的方法

获取Field类对象的方法

Class.getDeclaredField(String name);返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括私有成员)
Class.getDeclaredFields();返回 Field 对象的一个数组,该数组包含此 Class 对象所表示的类或接口所声明的所有字段(包括私有成员)
Class.getField(String name);返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Class.getField(String name);

元注解:@Retention

注解@Retention用来修饰注解,是注解的注解。称为元注解。

Retention注解有一个属性value,是RetentionPolicy枚举类型,决定了Retention注解应该如何去保持。

RetentionPolicy有三个值:SOURSE,CLASS ,RUNTIME。

  1. 注解只会保留在源文件中,编译时注解会被遗弃。

  2. 注解会保留到class文件中,当class文件中被加载时遗弃,这是默认的注解生命周期。

  3. 注解不仅被保留到class文件中,还会保留到虚拟机运行时一直存在。

对应于:源文件,.class文件,内存中的字节码。

使用场景:

如果需要在运行时反射去获取注解信息,那只能用RUNTIME注解。

如果编译时需要依赖注解进行预处理,比如生成一些辅助代码等,如Butterknihe,Arounter就用CLASS注解。

如果只是做一些检查性操作,比如@Override和@SuppressWarnings,使用

SOURSE注解,一般是供IDE使用。

手写一个注解类

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface godvPro {

    String columnName() default "fzw";

}

注解与反射的简单使用

import java.io.File;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;

public class TestReflect {

    @godvPro
    public String money;

    public static void main(String[] args) {
        Field[] fields = TestReflect.class.getDeclaredFields();
        List<Field> fields1 = Arrays.asList(fields);
        fields1.forEach(x -> System.out.println(x.getAnnotation(godvPro.class).columnName()));

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值