反射+注解

本文详细介绍了IDEA的基本设置方法,包括编码格式、代码缩放、智能提示等功能的开启,以及如何导入外部库和使用Lombok插件。同时,深入讲解了Java反射机制,包括Class、Field、Constructor、Method的使用,以及注解的定义和获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IDEA基本设置

设置编码格式

  1. Configure - Settings - Editor - File Encodings
  2. 将三个编码全部设置为UTF-8

启用Ctrl+滑轮缩放代码

  1. Configure - Settings - Editor - General
  2. 将右边第二个勾选中。

启用鼠标悬浮智能提示

  1. Configure - Settings - Editor - General
  2. 勾选Other下面的第三个选项“Show quick documentation on mouse move”

IDEA导包(以junit为例)

  1. 准备junit的jar包:
    • hamcrest-core-1.3.jar
    • junit-4.12.jar
  2. 在项目中新建文件夹:lib
  3. 将jar包复制进去
  4. 打开项目结构设置:File - Project Structure
  5. 依次选择“Modules - 你的项目模块 - Dependencies”,打开项目依赖设置
  6. 点击“+”、“JARs or directories”
  7. 选择当前项目中的lib文件夹,确定,即可完成导入。

Lombok的使用

  1. 将 lombok-1.18.4.jar 包导入项目中
  2. IDEA安装插件:lombok-plugins-{版本}.zip
  3. 启用注解:
    • File - Settings - Build,Execution,Deployment
    • Compiler - Annontation Proccessor
    • 选择Default,勾选“enable annotations proccessor”

反射相关类

  1. Class:类的模板,可以根据Class获取目标类的所有信息。
  2. Field:字段/属性。
  3. Constructor:构造函数。
  4. Method:类中的方法。

获取Class的方式

  1. 动态加载
    Class clz = Class.forName("com.demo.bean.User")
    
  2. 通过对象获取
    User zs = new User();
    Class clz = zs.getClass();
    
  3. 通过类获取
    Class clz = User.class;
    

Class相关方法

方法名描述结果示例
getName()获取类的全名称。com.demo.bean.User
getSimpleName()获取类名。User
getFields()获取所有public的属性。public int com.bean.User.id
getDeclaredFields()获取所有属性/字段。所有public和private的属性和字段。
getMethods()获取所有public的方法。public void com.demo.bean.User.setId(int)
getDeclaredMethods()获取所有方法。public void com.demo.bean.User.setId(int)
getDeclaredMethod()获取指定名称的方法。
getConstructors()获取public的无参构造函数。public User()
getDeclaredConstructors()获取所有无参构造函数。
getDeclaredConstructor()只获取无参构造,因为没有指定参数类型。
getDeclaredConstructor(int.class)只获取包含int的构造,因为指定了一个int的参数类型。

Field字段

方法名描述结果示例
getName()获取字段的名称。name
getType()获取字段的类型。int

Method方法

方法名描述结果示例
getName()获取方法名。getName()
getReturnType()获取方法的返回值类型。int
invoke()执行方法,获取返回结果。(Object)

设置注解的使用场景

使用@Target注解,如下:

@Target(ElementType.TYPE)
public @interface Table { }

设置注解的生命周期(运行时环境)

  1. SOURCE:源码级
  2. CLASS:字节码级
  3. RUNTIME:运行时级
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Table { }

为注解设置参数

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Table {
    String name() default "";
}

获取指定类型的注解

Class clz = User.class;
Table table = (Table)clz.getDeclaredAnnotation(Table.class);
if(table!=null && table.name().length()!=0)){
    String name = table.name()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值