为了简短地演示一下反射的部分能力,我把这段API拿出来展览一下:
API设计思路概述:
java类库中有很多类都具有一个“close”方法,譬如ResultSet,Statement,Connection,InputStream等捏着计算机资源的类,他们需要在程序结束时释放资源,否则可能引起严重的资源泄漏,而这个方法一般都叫做close。
我在开发税款联网时,需要频繁地读写文件、处理数据库连接,处理数据流,在退出一个流程前需要写一大堆close语句。写了七八个close以后,我的懒劲发作了:决定写一个通用的关闭工具。
既然要通用,那么就要挖掘操作对象的共性,显然它们的共性只有一个:都具有close方法,但没有共同接口。在OOP上无法做文章,幸好Java是具有强大动态能力的语言,我们还可以用“反射”!
代码如下:
================================================================
/**
* ReflectTool.java
* Nov 17, 2006
*/
package
cn.tohot.util;
import java.lang.reflect.Method;
/**
* @author 杨
*/
public class ReflectTool
{
/**
* 调用Object的methodName方法 使用反射,查找类是否具有该方法(无参数,无返回值),如果有则调用
*
屏蔽所有异常
* @param objects
*/
public static void call(Object object,
String methodName) {
if (object == null || methodName == null ||
methodName.matches("^\\s*$"))
return;
Class c =
object.getClass();
Method method = null;
try {
if ((method =
c.getMethod(methodName, null)) != null)
method.invoke(object,
null);
} catch (Exception e) {
}
}
/**
* 依次调用call()
*
* @see #call(Object, String)
*
@param objects
* @param methodName
*/
public static void
call(Object[] objects, String methodName) {
for (int i = 0; i <
objects.length; i++) {
call(objects[i ], methodName);
}
}
/**
* 实际调用call(Object[],"close")
* @param objArray
*/
public static void closeAll(Object[] objArray) {
call(objArray,
"close");
}
}
代码很简单,不管你是什么类,只要你有close方法,我就能调用你
。
不过这里我是管杀不管埋的——异常被catch掉了——因为在关闭资源时如果发生异常,
我们其实无能为力,什么都做不了,所以我简单粗暴地把异常扼杀在了摇篮里。
可以用如下的代码调用:
DataWriter writer = new DataWriter(new BufferedWriter(new FileWriter(path)));
line.setNeedGbhy(CommonLogic.needGbhy(this));
Connection conn = null;
Savepoint middle = null;
PreparedStatement pst = null, pst1 = null, pst2 = null;
ResultSet rs = null;
....
....
ReflectTool.closeAll(new Object[] { rs, pst, pst1, pst2, conn, writer });
注:DataWriter 是我自定义的类,也有close方法。
如果你仔细看,会发现call是一个通用方法,它并不是局限于close的。
【2008-1】
分享到:
相关推荐
通杀通杀
胖嘟嘟通杀器通杀可可,易游,E盾,天盾等网络验证
作者在浏览Twitter时发现了一种解决带内回显问题的方法,这种方法基于一篇名为《通杀漏洞利用回显方法——Linux平台》的文章。该文章提出了一个思路,即通过Java反序列化执行Java代码和系统命令来获取发起请求时...
银河网络验证通杀器破解版
可可网络通杀验证9.5
Max平台和Linux平台的破解方法,需先安装Charles , 然后自己搜索安装好后的charles.jar的文件, 复制出来在Win平台下用此工具进行破解,破解完成再覆盖回去即可。 Charles在解析AMF数据时是目前同类软件中最强的,做...
在"html万能通杀器官网源码"这个主题中,我们可以深入探讨HTML在网页设计和开发中的关键作用以及其相关知识点。 1. HTML基本结构:HTML文档通常由`<!DOCTYPE>`声明开始,接着是`<html>`元素,它是整个文档的根元素...
通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳通杀所以壳...
通杀注册宝账号密码
可可DNF 端口通杀3.1.vmp.exe
下载程序最新通杀漏洞入侵工具.rar 下载程序最新通杀漏洞入侵工具.rar 下载程序最新通杀漏洞入侵工具.rar 下载程序最新通杀漏洞入侵工具.rar 下载程序最新通杀漏洞入侵工具.rar 下载程序最新通杀漏洞入侵工具....
易语言下载程序最新通杀漏洞入侵工具.rar 易语言下载程序最新通杀漏洞入侵工具.rar 易语言下载程序最新通杀漏洞入侵工具.rar 易语言下载程序最新通杀漏洞入侵工具.rar 易语言下载程序最新通杀漏洞入侵工具.rar ...
《深入解析:发卡通杀——基于“泽宇发卡”与“知宇发卡”的漏洞利用》 在网络安全领域,发卡平台的安全性至关重要,因为它们涉及到大量的金融交易和用户数据。本文将深入探讨名为“泽宇发卡”和“知宇发卡”的发卡...
使用方法: 先下载原版(安装时注意插件勿选): http://www.newhua.com/soft/114329.htm 或官网:http://www.iobit.com/ascdownload.html 然后结束进程“ASCService.exe”,将附件2个文件解压覆盖到安装目录下运行...
【标题】:“易游通杀源码”是一个与游戏编程相关的知识主题,主要涉及的是针对“易游”游戏平台的漏洞修复或优化技术。在IT行业中,源码是指程序的原始编写代码,它是软件开发的基础,揭示了软件内部的工作机制。...
Charles 4.x通杀解工具批处理版 来自52pojie官方 非常好用的抓包工具的破解补丁
sublime Text 通杀补丁.rar sublime Text 通杀补丁.rar sublime Text 通杀补丁.rar
本文将围绕“Navicat通杀版”这一主题,深入探讨其在连接MySQL、Oracle、SQL Server等多类型数据库中的应用,以及如何利用NavicatAll_Premium_11.0.10.exe这个安装包进行安装和使用。 首先,Navicat是一款由...
都叫兽数据恢复2017通杀补丁,本通杀补丁 补丁一次即可支持软件后续自动更新
本文将深入探讨D3Dhook的工作原理、实现方式以及它如何通杀所有DirectX版本,包括从Windows XP到Windows 8.1的操作系统。 首先,Direct3D是Microsoft为Windows平台开发的一套图形应用程序接口(API),用于创建高...