/**
* 关闭系统资源,不抛出异常,用于关闭一些不再使用的系统资源,如数据库连接,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;
}
这是我下午写的一个方法,因为一些系统资源关闭的时候,经常需要捕获异常,所以我就想到写这么个方法. 没和组长商量就把代码提了,并向其他同事介绍这个方法.但是却被批评了,请问这个方法的缺点在哪里? 麻烦高人指点,谢谢

解决方案 »

  1.   

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

  2.   

    1、你方法传的是Object,意味着什么资源都可以往里传,包括没实现closeable接口的资源2、方法名不是很好,一般叫closeXxxxQuietly,且catch里要记日志,还要说明不往外抛异常的原因其他倒是没有什么,最主要的该是在第一点,另外如何项目中已经使用了其他关闭资源的common方法,你搞这么一个显得不和谐了
      

  3.   

    你这样用反射还不如直接传入一个closeable对象
    这样直接调用close方法就可以了,这个是正对IO流的如果是数据库之类的话,不能写出一个通用的关闭方法,需要针对不同对象写不同的方法,比如Connection,Resultset还有就是要在关闭前先判断下是否为null
      

  4.   


    要是你给我传null,就不管你了,因为谁会去关一个为null的对象? 
    我之所以要这么写,就是想不管她的具体类型,因为很多资源的关闭方法都一样,都是close方法,所以我这个方法相当于一个模板方法,呵呵