在大多数编程语言中,开发人员有责任编写不可变的,单例类等。

但是,我觉得这是重复的样板代码的一种。更新的编程语言为实现此目的提供了更好的支持。

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 工作原理的一个很好的摘要。

09-30 14:50
查看更多