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.mzph.cn/news/194580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P9516 color C++代码

目录 前言 思路点拨 AC代码 结尾 前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;color - 洛谷 题目&#xff1a; 思路点拨 这题就是if-else判断输入的五个数据和不就OK了&#xff1f; 在这里我的估值是183&#xff08;截止2023.12.3&#xff09;&#xff0c;热…

Java 中 IO 流分为几种?

Java 中 IO 流分为几种&#xff1f; 在Java中&#xff0c;I/O&#xff08;输入/输出&#xff09;流用于处理输入和输出操作。I/O 流分为两大类&#xff1a;字节流和字符流&#xff0c;每个类别又分为输入流和输出流。 字节流&#xff08;Byte Streams&#xff09;&#xff1a…

【力扣】56. 合并区间

【力扣】56. 合并区间 文章目录 【力扣】56. 合并区间1. 题目介绍2. 解法2.1 方法一&#xff1a;标志位2.2 方法二&#xff1a;排序 遍历 3. Danger参考 1. 题目介绍 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合…

Linux系统配置深度学习环境之cudnn安装

前言 一个针对深度学习应用优化的 GPU 加速库。它提供了高性能、高可靠性的加速算法&#xff0c;旨在加速深度神经网络模型的训练和推理过程。 cuDNN 提供了一系列优化的基本算法和函数&#xff0c;包括卷积、池化、规范化、激活函数等&#xff0c;以及针对深度学习任务的高级功…

移动平均滤波的原理和C代码

移动平均滤波是一种简单有效的平滑信号的方法&#xff0c;它通过计算一系列数据点的平均值来减小信号中的波动。基本的移动平均滤波方法有两种&#xff1a;简单移动平均&#xff08;SMA&#xff09;和指数加权移动平均&#xff08;EWMA&#xff09;。 简单移动平均滤波&#xf…

Go读取yaml文件,struct返回,json输出

程序模块中&#xff0c;缺少不了一些配置定义&#xff0c;这时定义yaml是个很好的选择 先定义yaml文件内容&#xff0c;文件名为&#xff1a;task_status_config.yaml confs:#阅读类任务&#xff0c;即提醒任务read:name: readawait: #待开始任务status_id: 0ing: #进行中任务…

基于直流微电网的光伏并网功率转换装置设计与运行仿真

摘要 微电网是目前国内外应用较为广泛的一种绿色可再生能源&#xff0c;近几年我国微电网产业的发展十分迅速。然后&#xff0c;越来越多的微电网系统建立并网&#xff0c;微电网产生的电能受外界因素影响较大&#xff0c;具有一定的随机性和波动性&#xff0c;给并网后的电力系…

高通410随身wifi编译安装Asterisk(chan_mobile)搭建内网voip系统

前几天写了教程在ubuntu上搭建Asterisk,成功在内网打通了SIP通话。 ubuntu是18.04,安装的虚拟机系统;最近手头的斐讯的N1,Armbian系统,以及高通410的Debian系统,就是ubuntu内核,所以理论上应该也可以安装Asterisk;在这之前在openwrt上研究了一周多,Asterisk是跑起来了…

MATLAB算法实战应用案例精讲-【图像处理】人脸识别(补充篇)

目录 人脸识别业务流程 1、通用流程概述 2、ArcFace接入集成及示例 2.1 SDK的获取 2.2 SDK包结构

leetcode (力扣) 154. 寻找旋转排序数组中的最小值 I+II (二分法)

文章目录 题目描述思路分析完整代码 题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以…

股票主力建仓

只有拥有足够的筹码&#xff0c;主力才能在实盘中控制股价的涨跌&#xff0c;所以&#xff0c;在确定目标股之后&#xff0c;主力想要进行控盘&#xff0c;首先要做的第一件事就是建仓。那么&#xff0c;主力会在什么时候建仓&#xff1f;建仓的时候会采用什么方法&#xff1f;…

53.redis分布式缓存

目录 一、单机安装Redis。 二、Redis主从集群。 2.1.集群结构 2.2.准备实例和配置 2.3.启动 2.4.开启主从关系 2.5.测试 三、搭建哨兵集群。 3.1.集群结构 3.2.准备实例和配置 3.3.启动 3.4.测试 四、搭建分片集群。 4.1.集群结构 4.2.准备实例和配置 4.3.启动…

监控之Spring Boot Admin

目录 一、Spring Boot Admin 简介 官方网址 简介 二、Spring Boot Admin的使用 启动SBA server 微服务端配置SBA server地址 查看监控信息 一、Spring Boot Admin 简介 官方网址 GitHup网址&#xff1a;GitHub - codecentric/spring-boot-admin: Admin UI for administ…

Linux下Redis安装及配置

首先下载redis安装包&#xff1a;地址 这里我使用的是7.0版本的&#xff01; 将文件上传至linux上&#xff0c;此处不再多叙述&#xff0c;不会操作的&#xff0c;建议使用ftp&#xff01; 第一步&#xff1a;解压压缩包 tar -zxvf redis-7.0.14.tar.gz第二步&#xff1a;移…

java读取word文件转html

一.pom引入依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.12.0</version><classifier>jdk16</classifier> </dependency>二.代码实现 package com.example…

nn.relu和F.rulu的区别

先来看看nn.ReLU的源码&#xff0c;可以看到其实在forward中nn.relu是调用了F.relu函数的&#xff1a; class ReLU(Module):r"""Applies the rectified linear unit function element-wise::math:\text{ReLU}(x) (x)^ \max(0, x)Args:inplace: can optionall…

Error:cannot launch node of type [map_server/map_server]

查看是否安装map_server软件包 rospack find map_server查看是否正确配置ROS环境变量 echo $ROS_PACKAGE_PATH如果没有安装map_server软件包 sudo apt-get install ros-noetic-map-server重新编译 catkin_make

网络安全--网络环境构成,系统的安全

2. 网络攻防环境 目标 了解攻防环境构成了解入侵检测系统&#xff08;平台&#xff09;的部署位置 2.1. 环境构成 2.1.1. 环境框图 一个基本的网络攻防实验环境包括&#xff1a;靶机、攻击机、入侵检测分析系统、网络连接四部分组成。 一个基础的网络攻防实验环境需要如下…

Python WebSocket 客户端教程

WebSocket 是一种在客户端和服务器之间实现双向通信的协议&#xff0c;常用于实时聊天、实时数据更新等场景。Python 提供了许多库来实现 WebSocket 客户端&#xff0c;本教程将介绍如何使用 Python 构建 WebSocket 客户端。 什么是 WebSocket WebSocket 是一种基于 TCP 协议…

使用 Kettle 完成数据 ETL

文章目录 使用 Kettle 完成数据 ETL数据清洗数据处理 使用 Kettle 完成数据 ETL 现在我们有一份网站的日志数据集&#xff0c;准备使用Kettle进行数据ETL。先将数据集加载到Hadoop集群中&#xff0c;然后对数据进行清洗&#xff0c;最后加载到Hive中。 在本地新建一个数据集文…