- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java反射在实际工作中的应用笔记由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近工作中遇到一个这样的问题:
为某个项目中的所有接口做一个测试工具,使用java Swing技术,该项目有不同的版本,不是所有版本中的接口都是相同的,而我做的工具需要兼容所有版本.
于是就引入了这样一个问题:
有些接口如果在部分版本中不存在,那么通过界面执行这个操作的时候就会报错,所以为了兼容所有版本,就要在方法调用之前考虑方法是否存在,同时为了不在编译时抛异常,在调用方法时 。
也需要通过反射来调用,具体实现如下:
1、使用反射判断方法是否存在 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/**
* 判断方法是否存在
*
* @param obj JObjectService实例
* @param methodName 方法名称
* @param paraTypes 方法形参类型数组
* @return
*/
public
static
boolean
judgeMethodIsExist(Object obj, String methodName, Class[] paraTypes) {
boolean
result =
true
;
try
{
if
(
null
!= obj) {
Method method = obj.getClass().getMethod(methodName, paraTypes);
}
}
catch
(NoSuchMethodException ex) {
showWarnInfo(ex.toString());
log.error(
"异常发生在:"
+ MainJFrame.hostName +
";详细信息为:"
+ ex.getMessage());
result =
false
;
}
return
result;
}
|
参数介绍:
(1)obj:表示调用某个方法的对象 。
(2)methodName:要调用的方法名称 。
(3)paraTypes:方法所需的参数类型(多个时为数组) 。
通过这个方法,就可以判断你通过obj对象调用的methodName(参数类型为)方法是否存在,如果不存在就会跑NoSuchMethodException异常 。
2、通过反射调用方法,避免编译时异常 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
sysUser = MainJFrame.getSysUser();
Class[] paramObj = {String.
class
,
long
.
class
, String.
class
, String.
class
,
int
.
class
};
//判断方法是否存在
boolean
isExist = CommonUtil.judgeMethodIsExist(sysUser,
"createBucket"
, paramObj);
if
(isExist) {
try
{
//通过反射调用方法
Class clazz = sysUser.getClass();
//方法名称--方法中参数的类型(按参数顺序)
Method createBucket = clazz.getDeclaredMethod(
"createBucket"
,String.
class
,
long
.
class
, String.
class
, String.
class
,
int
.
class
);
int
create = (
int
) createBucket.invoke(sysUser,bucketName, Long.parseLong(bucketSize), bucketLoc, bucketAcl, Integer.parseInt(StringUtil.emptyToZero(bucketCycle)));
if
(create ==
1
) {
CommonUtil.showInfo(
"Bucket创建成功"
);
log.info(
"Bucket创建成功"
);
}
else
{
CommonUtil.showWarnInfo(
"Bucket创建失败,服务器内部错误!"
);
log.info(
"Bucket创建失败,服务器内部错误"
);
}
}
catch
(Exception ex) {
CommonUtil.showWarnInfo(ex.getMessage());
log.error(
"异常发生在:"
+ MainJFrame.hostName +
";详细信息为:"
+ ex.getMessage());
}
}
|
以上代码中:
第一行:调用方法createBucket方法的对象sysUser 。
第二行:方法中的参数类型数组,在判断方法是否存在时用 。
第三行:通过对象、方法名和参数类型数组判断方法是否存在 。
通过以上三行,方法存在时会执行下面的任务,不存在是则会提示异常信息 。
第六行:获取该对象的Class 。
第七行:获取对象的方法Method对象,参数为方法名称和参数对应的类型 。
第八行:通过Method对象反射调用createBucket方法,参数分别是sysUser对象和需要的参数(值) 。
通过以上方法,即使对象中的某个接口不存在时也不会出现编译时异常.
讲真,这是第一次在自己的项目中遇到Java反射方面的问题,有必要需要记录一下! 。
总结 。
以上就是本文关于Java反射在实际工作中的应用笔记的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! 。
原文链接:http://www.cnblogs.com/hellowhy/p/7768202.html 。
最后此篇关于Java反射在实际工作中的应用笔记的文章就讲到这里了,如果你想了解更多关于Java反射在实际工作中的应用笔记的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
OkHttp的作用 OkHttp is an HTTP client。 如果是HTTP的方式想得到数据,就需要我们在页面上输入网址,如果网址没有问题,就有可能返回对应的String字符串,如果这个地址
Record 一个重要的字符串算法,这是第三次复习。 通过总结我认为之所以某个算法总是忘记,是因为大脑始终没有认可这种算法的逻辑(也就是脑回路)。 本篇主要讲解从KMP的应用场景,
SQL 注入基础 【若本文有问题请指正】 有回显 回显正常 基本步骤 1. 判断注入类型 数字型 or 字符型 数字型【示例】:
标签: #Prompt #LLM 创建时间:2023-04-28 17:05:45 链接: 课程(含JupyterNotebook) , 中文版 讲师: An
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来是的编程更加简单、灵活和有趣。界面则基于
红日靶机(一)笔记 概述 域渗透靶机,可以练习对域渗透的一些知识,主要还是要熟悉 powershell 语法,powershell 往往比 cmd 的命令行更加强大,而很多渗透开源的脚本都是 po
八大绩效域详细解析 18.1 干系人绩效域 跟干系人所有相关的活动. 一、预期目标 ①与干系人建立高效的工作关系 ②干系人认同项目目标 ③支持项目的干系人提高
18.3 开发方法和生命周期绩效域 跟开发方法,项目交付节奏和生命周期相关的活动和职能. 一、预期目标: ①开发方法与项目可交付物相符合; ②将项目交付与干系人价值紧密
18.7 度量绩效域 度量绩效域涉及评估项目绩效和采取应对措施相关的活动和职能度量是评估项目绩效,并采取适当的应对措施,以保持最佳项目绩效的过程。 一、 预期目标: ①对项目状况
pygraphviz 安装,windows系统: 正确的安装姿势: Prebuilt-Binaries/PyGraphviz at master · CristiFati/Prebuilt-Binar
今天给大家介绍IDEA开发工具如何配置devtools热加载工具。 1、devtools原理介绍 spring-boot-devtools是spring为开发者提供的热加载
一 什么是正则表达式 // 正则表达式(regular expression)是一个描述字符模式的对象; // JS定义RegExp类表示正则表达式; // String和RegExp都定义了使用
目前是2022-04-25 23:48:03,此篇博文分享到互联网上估计是1-2个月后的事了,此时的OpenCV3最新版是3.4.16 这里前提是gcc,g++,cmake都需要安装好。 没安装好的,
一、概述 1、Flink 是什么 Apache Flink is a framework and distributed processing engine for stateful comput
一、window 概述 Flink 通常处理流式、无限数据集的计算引擎,窗口是一种把无限流式数据集切割成有限的数据集进行计算。window窗口在Flink中极其重要。 二、window 类型 w
一、触发器(Trigger) 1.1、案例一 利用global window + trigger 计算单词出现三次统计一次(有点像CountWindow) 某台虚拟机或者mac 终端输入:nc -
一、时间语义 在Flink 中涉及到三个重要时间概念:EventTime、IngestionTime、ProcessingTime。 1.1、EventTime EventTime 表示日志事
一、概述 以wordcount为例,为什么每次输入数据,flink都能统计每个单词的总数呢?我们都没有显示保存每个单词的状态值,但是每来一条数据,都能计算单词的总数。事实上,flink在底层维护了每
一、概述 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保 证应用流图状
一、standalone 部署模式 1、下载安装包 下载安装包地址 有两种安装包类型: 第一种是带 Hadoop依赖的(整合YARN) 第二种是不带 Hadoop依赖的(Standalone模式)
我是一名优秀的程序员,十分优秀!