在大多数编程语言中,开发人员有责任编写不可变的,单例类等。
但是,我觉得这是重复的样板代码的一种。更新的编程语言为实现此目的提供了更好的支持。
Java 9是否引入了任何注释或类似构造来将类标记为不可变或单例?
最佳答案
据我所知,不存在,Java 9中不存在这样的构造。当然可以在list of new features中进行记录。
作为附带说明,Java EE具有 @Singleton
批注,该批注指定Bean为单例。
进一步说明,存在对Project Lombok的扩展,称为
lombok-pg具有 @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将iteslf Hook 到编译过程中,并修改了类。在某些人看来,这是一件“棘手的事情”,也许应该谨慎使用。另一个缺点是,您必须修改IDE才能了解Lombok生成的代码。这是通过运行下载的Lombok jar文件来完成的。
可以在here上找到有关 Lombok 工作原理的一个很好的摘要。