Нет, насколько я знаю, в Java 9 таких конструкций не существует. Конечно, это было бы задокументировано в списке новых функций .
В качестве примечания, Java EE имеет аннотацию @Singleton
, которая указывает, что компонент является синглтоном.
В качестве дополнительного примечания, Project Lombok имеет реализацию @Singleton
аннотации:
@Singleton(style=Singleton.Style.HOLDER)
public class SingletonHolderExample {
private String s;
public void foo() {
}
}
Это эквивалентно следующему коду:
public class SingletonHolderExample {
private static class SingletonHolderExampleHolder {
private static final SingletonHolderExample INSTANCE = new SingletonHolderExample();
}
public static SingletonHolderExample getInstance() {
return SingletonHolderExampleHolder.INSTANCE;
}
private String s;
public void foo() {
}
}
Обратите внимание, что Lombok подключает себя к процессу компиляции и изменяет классы. Некоторые считают это «хакерским» делом, и, возможно, его следует использовать с причинно-следственной связью. Другим недостатком является то, что вам нужно изменить IDE, чтобы он понимал, какой код генерирует Lombok. Это делается путем запуска загруженного файла Jar Lombok.
Хорошее резюме того, как работает Lombok, с его плюсами и минусами, можно найти здесь .