+ -
当前位置:首页 → 问答吧 → 一种关闭资源的方法

一种关闭资源的方法

时间:2011-12-16

来源:互联网

/**
* 关闭系统资源,不抛出异常,用于关闭一些不再使用的系统资源,如数据库连接,ResultSet,IO流等系统对象
*/
public static boolean closeResourceWithoutExcep(Object closeAble){

  boolean closedSuccess = true; // 关闭成功标志
  try{
  Class<?> targetClass = closeAble.getClass();
  Method closeMethod = targetClass.getMethod("close");
  closeMethod.invoke(closeAble);
  }catch(Exception e){
  e.printTraceStack();// 
  closedSuccess = false;
  }

  return closedSuccess;
}
这是我下午写的一个方法,因为一些系统资源关闭的时候,经常需要捕获异常,所以我就想到写这么个方法. 没和组长商量就把代码提了,并向其他同事介绍这个方法.但是却被批评了,请问这个方法的缺点在哪里? 麻烦高人指点,谢谢

作者: Soft_dep   发布时间: 2011-12-16

Object closeAble里的close方法抛异常 
closeResourceWithoutExcep 再调用一下捕异常 而且还得反射调用
多此一举吧 ,并且反射耗资源
没工作过 不好说 看楼下怎么说

作者: Xiaos_hui   发布时间: 2011-12-16

1、你方法传的是Object,意味着什么资源都可以往里传,包括没实现closeable接口的资源

2、方法名不是很好,一般叫closeXxxxQuietly,且catch里要记日志,还要说明不往外抛异常的原因

其他倒是没有什么,最主要的该是在第一点,另外如何项目中已经使用了其他关闭资源的common方法,你搞这么一个显得不和谐了

作者: ticmy   发布时间: 2011-12-16

你这样用反射还不如直接传入一个closeable对象
这样直接调用close方法就可以了,这个是正对IO流的

如果是数据库之类的话,不能写出一个通用的关闭方法,需要针对不同对象写不同的方法,比如Connection,Resultset

还有就是要在关闭前先判断下是否为null

作者: dxqrr   发布时间: 2011-12-16