当前位置: 首页 > article >正文

Google Guava 反射工具使用详解

文章目录

  • 反射
    • 类操作
    • 方法操作
    • 字段操作
    • 获取注解


反射

在 Guava 中,反射(Reflection)模块提供了一些用于简化反射操作的工具类和方法。通过 Guava 的反射模块,您可以方便地进行类、方法、字段的操作、获取注解信息等。下面详细介绍一些 Guava 反射模块的使用方法和示例。

类操作

  1. 使用 TypeToken 类可以获取类的类型信息,包括泛型类型:

    TypeToken<String> stringToken = TypeToken.of(String.class);
    TypeToken<List<String>> listToken = new TypeToken<List<String>>() {};
    Class<?> stringClass = stringToken.getRawType(); // 获取原始类型,结果为 class java.lang.String
    Type stringType = stringToken.getType(); // 获取类型,结果为 java.lang.String
    Type listType = listToken.getType(); // 获取类型,结果为 java.util.List<java.lang.String>
    

方法操作

  1. 使用 Invokable 类可以调用方法、获取方法的参数和返回值类型等信息:

    Method method = MyService.class.getMethod("myMethod", String.class, int.class);
    Invokable<?, ?> invokable = Invokable.from(method);
    Object result = invokable.invoke(myServiceInstance, "param1", 123); // 调用方法
    Type returnType = invokable.getReturnType().getType(); // 获取返回值类型
    List<TypeToken<?>> parameterTypes = invokable.getParameterTypes(); // 获取参数类型列表
    

字段操作

  1. 使用 FieldReflection 类可以获取和设置字段的值、获取字段的类型等信息:

    Field field = MyService.class.getField("myField");
    Object fieldValue = FieldReflection.getField(field, myServiceInstance); // 获取字段的值
    FieldReflection.setField(field, myServiceInstance, newValue); // 设置字段的值
    Type fieldType = FieldReflection.getFieldType(field).getType(); // 获取字段的类型
    

获取注解

  1. 使用 AnnotationScanner 类可以扫描类或方法上的注解,并获取注解的信息:
    ImmutableList<Class<? extends Annotation>> annotations = ImmutableList.of(MyAnnotation.class);
    AnnotationScanner.scanClasspath(ClasspathHelper.forPackage("com.example"))
       .annotatedWithAny(annotations)
       .forEach(cls -> {
           MyAnnotation myAnnotation = cls.getAnnotation(MyAnnotation.class);
           // 处理注解信息
       });
    

http://www.kler.cn/a/156276.html

相关文章:

  • Dockerfile的使用
  • 408模拟卷较难题(无分类)
  • 三、损失函数
  • 如何使用ffmpeg命令行进行录屏
  • Linux 系统管理和监控命令---- auditctl命令
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 用纯 CSS 实现网格背景
  • 【Node.js】Node.js环境下载与安装教程(Windows系统)
  • 《系统架构设计师教程(第2版)》第2章-计算机系统基础知识-02-计算软件
  • 34、AD/DA
  • Vue 与 React
  • Python标准库:datetime模块【侯小啾python领航班系列(二十五)】
  • 【python爬虫】设计自己的爬虫 2. 数据保存封装 mongodb,mysql和elasticsearch
  • SQL -高阶3
  • Linux系统centos7防火墙firewall开放IP及端口命令
  • 2023.12.3 hive-sql日期函数小练习
  • k8s中批量处理Pod应用的Job和CronJob控制器、处理守护型pod的DaemonSet控制器介绍
  • 深入理解Go语言GC机制
  • SAP_ABAP_RZ11解决SAP运行超时问题 TIME_OUT / rdisp/scheduler/prio_high/max_runtime
  • 最强Node js 后端框架学习看这一篇文章就够
  • 内衣洗衣机哪个牌子好用?小型洗衣机五大排名
  • 在项目根目录未找到 app.json
  • leetcode:232. 用栈实现队列
  • Mybatis-Plus实现逻辑删除
  • C++ 实现微信退款和对账示例代码
  • ASP.NET 网上选课系统的设计与实现