我的目标是将 try-with-resource 构造与一个类的单个实例一起使用,即 singleton ,它处理一个连接池。我需要这个以确保连接池在所有内容结束时关闭,然后我想使用 try-with-resource 。 E.g。
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用作单例?
答案 0 :(得分:5)
我看到确保类是单例的常用方法是将其构造函数设置为private,然后使用公共静态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 Framework也有一个很好的系统来定义单例。
答案 1 :(得分:1)
如果您需要的是单例类,则应该将构造函数设为私有,并创建一个名为getInstance()的公共方法和一个私有属性MyHandler实例(或您想要的任何名称)。然后,getInstance方法调用构造函数" MyHandler()"如果instance为null或未定义。最后,它返回实例属性。
答案 2 :(得分:1)
声明类单例有很多种方法,但这种方法有局限性。单身人士的最佳方式是ENUM。声明ENUM,其余部分将自动处理。