3

我的目标是将try-with-resource构造与一个类的单个实例一起使用,即处理连接池的单例。我需要这个来确保连接池在一切结束时关闭,然后我想使用try-with-resource。例如

public class MyHandler implements java.io.Closeable{

   public static ConnectionPool pool;

   //Init the connection pool
   public MyHandler(){
      pool = ...;
   }

    @Override
    public void close() {
        pool().close();    
    }
}

可能的地方main是:

public static void main(String [] args){
  try(MyHandler h = new MyHandler){
     //execute my code
     // somewhere I do MyHandler.pool.something();
  }
}

如何确保 MyHandler 用作单例?

4

3 回答 3

6

我见过的确保类是单例的常用方法是将其构造函数设置为私有,然后使用公共静态 getInstance 方法来检索单例。

public class MyHandler implements java.io.Closeable {
    private static MyHandler singleton = new MyHandler();
    private MyHandler() {}
    public static MyHandler getInstance() {
        return singleton;
    }

    @Override
    public void close() {
        //close stuff  
    }
}

try(MyHandler h = MyHandler.getInstance()){ }

Spring 框架也有一个很好的系统来定义单例。

于 2013-04-14T17:46:46.570 回答
1

如果您需要的是一个单例类,您应该将您的构造函数设为私有并创建一个名为 getInstance() 的公共方法和一个私有属性 MyHandler 实例(或任何您想要的名称)。然后,如果实例为空或未定义,getInstance 方法将调用构造函数“MyHandler()”。最后,它返回实例属性。

于 2013-04-14T17:50:01.993 回答
1

声明类单例的方法有很多种,但这种方法存在局限性。单例方法的最佳方法是 ENUM。声明 ENUM,其余的事情将被自动处理。

于 2013-04-14T17:56:55.397 回答