Say you have this class:
public class TerminalTitlebar { public void set(String title) { System.out.println("\033]0;" + title + "\007"); } }
...and you want to introduce code to change this into a singleton easily.
File -> Settings -> Live Templates -> Click + to create a new entry.
Enter i for abbreviation, "singleton instance" or something similar for description, and the code in the "Template text" field:
private static $CLASS_NAME$ instance; public static $CLASS_NAME$ getInstance() { return instance == null ? instance = new $CLASS_NAME$() : instance; }
Now click "Edit Variables", and change the Expression for CLASS_NAME to "className()", press OK
To tell IntelliJ to use the generated snippet in Java code, click "Change" in the "Applicable in" line, and select Java.
Now type the letter i (this was the abbreviation we used earlier) and press TAB and the magic happens:
public class TerminalTitlebar { private static TerminalTitlebar instance; public static TerminalTitlebar getInstance() { return instance == null ? instance = new TerminalTitlebar() : instance; } public void set(String title) { System.out.println("\033]0;" + title + "\007"); } }
Voila, you can use it in any class. Enjoy!
This is absolutely brilliant. Thank you very much!
ReplyDeleteIt's not thread-safe singleton
ReplyDeleteThe point of the article is to show how you can use Idea's live templates, nobody mentioned thread-safety... A quick google popped up http://stackoverflow.com/questions/16106260/thread-safe-singleton-class dealing with thread safety in singletons; I hope adapting the non-thread-safe example above will not pose a problem.
Delete