Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

      • 反射
        • 模块概述
        • JDK反射对比
          • JDK反射的不足
          • Hutool反射模块的优势
        • 核心类结构
        • 模块使用场景
        • 快速开始
          • 类操作
          • 反射操作
          • 方法调用
          • 构造器操作
          • 类扫描
        • 总结
      • 类工具-ClassUtil
      • 反射工具-ReflectUtil
      • 字段工具-FieldUtil
      • 构造器工具-ConstructorUtil
      • 类型工具-TypeUtil
      • ClassScanner 类扫描器
      • JDK代理工具-JdkProxyUtil
      • 修饰符工具-ModifierUtil
      • 类描述工具-ClassDescUtil
    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 反射(reflect)
Hutool
2026-01-03
目录

反射

反射模块是Hutool的核心模块之一,提供了丰富的Java反射操作功能,简化了Java反射的使用,使反射操作更加便捷高效。

# 模块概述

反射是Java的一个强大特性,允许程序在运行时获取类的信息并操作类的对象。然而,Java原生的反射API使用起来相对复杂,需要编写大量的代码,并且容易出错。

Hutool的反射模块对Java原生反射API进行了封装,提供了简洁易用的API,涵盖了以下功能:

  • 类操作:类的加载、实例化、方法调用等
  • 字段操作:字段的获取、设置、遍历等
  • 方法操作:方法的获取、调用、遍历等
  • 构造器操作:构造器的获取、实例化等
  • 类型操作:泛型类型的获取、解析等
  • 类扫描:扫描指定包下的类
  • 注解操作:注解的获取、解析等

# JDK反射对比

# JDK反射的不足

  1. API复杂:Java原生反射API设计较为复杂,需要编写大量的代码
  2. 异常处理繁琐:需要处理多种checked异常,如IllegalAccessException、InvocationTargetException等
  3. 性能开销:原生反射的性能开销较大
  4. 类型安全:反射操作缺乏类型安全检查
  5. 代码可读性差:反射代码通常比较冗长,可读性差

# Hutool反射模块的优势

  1. API简洁:提供了简洁易用的API,减少代码量
  2. 异常处理简化:将checked异常转换为runtime异常,避免繁琐的try-catch
  3. 性能优化:内置缓存机制,提高反射性能
  4. 类型安全:提供了类型安全的方法,避免类型转换错误
  5. 代码可读性好:反射操作更加直观,代码可读性更高
  6. 功能丰富:提供了丰富的反射操作功能,满足各种需求

# 核心类结构

类名 主要功能
ClassUtil 类操作工具类,提供类的加载、实例化、扫描等功能
ReflectUtil 反射工具类,提供反射相关的通用操作
FieldUtil 字段操作工具类,提供字段的获取、设置、遍历等功能
ConstructorUtil 构造器操作工具类,提供构造器的获取、实例化等功能
MethodUtil 方法操作工具类,提供方法的获取、调用、遍历等功能
TypeUtil 类型操作工具类,提供泛型类型的获取、解析等功能
ClassScanner 类扫描工具类,用于扫描指定包下的类
JdkProxyUtil JDK代理工具类,用于创建JDK动态代理

# 模块使用场景

反射模块适用于以下场景:

  1. 框架开发:如ORM框架、依赖注入框架等
  2. 动态代理:如AOP、事务管理等
  3. 配置驱动开发:根据配置动态加载和实例化类
  4. 工具类开发:需要操作任意类的工具类
  5. 单元测试:测试私有方法和字段
  6. 序列化/反序列化:如JSON、XML等格式的序列化和反序列化
  7. 动态调用:根据运行时条件动态调用方法

# 快速开始

# 类操作

// 获取类的Class对象
Class<?> clazz = ClassUtil.loadClass("cn.hutool.v7.core.lang.StrUtil");

// 实例化对象
Object obj = ClassUtil.newInstance(clazz);

// 获取类的所有方法
List<Method> methods = ClassUtil.getMethods(clazz);

// 获取类的所有字段
List<Field> fields = ClassUtil.getFields(clazz);

# 反射操作

// 实例化对象
User user = ReflectUtil.newInstance(User.class);

// 设置字段值
ReflectUtil.setFieldValue(user, "name", "张三");
ReflectUtil.setFieldValue(user, "age", 25);

// 获取字段值
String name = ReflectUtil.getFieldValue(user, "name");
int age = ReflectUtil.getFieldValue(user, "age");

// 调用方法
String result = ReflectUtil.invoke(user, "sayHello", "Hutool");

# 方法调用

// 获取方法
Method method = ReflectUtil.getMethod(User.class, "sayHello", String.class);

// 调用方法
String result = ReflectUtil.invoke(user, method, "Hutool");

# 构造器操作

// 获取构造器
Constructor<User> constructor = ConstructorUtil.getConstructor(User.class, String.class, int.class);

// 实例化对象
User user = ConstructorUtil.newInstance(constructor, "张三", 25);

# 类扫描

// 扫描指定包下的所有类
List<Class<?>> classes = ClassScanner.scanPackage("cn.hutool.v7.core");

// 扫描指定包下实现了特定接口的类
List<Class<?>> classes = ClassScanner.scanPackageByInterface("cn.hutool.v7.core", Serializable.class);

// 扫描指定包下带有特定注解的类
List<Class<?>> classes = ClassScanner.scanPackageByAnnotation("cn.hutool.v7.core", Component.class);

# 总结

反射模块是Hutool的核心模块之一,提供了丰富的Java反射操作功能,简化了Java反射的使用。通过使用反射模块,可以大大减少反射操作的代码量,提高开发效率,同时提高代码的可读性和可维护性。

无论是框架开发、动态代理还是配置驱动开发,反射模块都能提供简洁高效的解决方案。接下来,我们将详细介绍反射模块中的核心工具类,包括ClassUtil、ReflectUtil、FieldUtil等,帮助大家更好地理解和使用这些工具类。

对象池使用
类工具-ClassUtil

← 对象池使用 类工具-ClassUtil→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式