While searching for some coding practices, I realized some people are wondering how to do a singleton in Java (I know, this is considered an anti-pattern when badly used) :
public class Controller {
private static final Controller ctrl;
static {
ctrl = new Controller();
}
private Controller() {
}
public static Controller get() {
return ctrl;
}
}
That's the _only_ way to do it correctly in Java. Your static block is protected by the classloader lock, so everything is fine. This implementation _can_ bug, but that supposes you know how to subclass/implement a ClassLoader. In a webapp it's fine if you're wondering (well tomcat will leak your singleton memory if you abuse hot deploy).
I made this post as I'm reviewing some opush contributed code. What you can find on the net about java & singleton is quite
fun. Nice article by someone who didn't know what are static blocks. Static blocks are "Java approved" since 2000.