它是否存在在Java 9中将类标记为单例或不可变的注释?

Jav*_*ser 4 java singleton immutability java-9

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

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

Java 9是否引入了任何注释或类似构造来将类标记为不可变或单例?

Mag*_*lex 6

不,据我所知,Java 9中不存在这样的构造。当然,新功能列表中已记录了这些构造。


作为附带说明,Java EE具有@Singleton注释,该注释指定Bean是单例。


进一步说明,Lombok项目有一个扩展,称为 lombok-pg,它具有@Singleton注释的实现:

@Singleton(style=Singleton.Style.HOLDER)
public class SingletonHolderExample {
  private String s;

  public void foo() {
  }
}
Run Code Online (Sandbox Code Playgroud)

这等效于以下代码:

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() {
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,Lombok将iteslf挂接到编译过程中,并修改类。某些人认为这是一件“棘手的事情”,也许应该谨慎使用。另一个缺点是,您必须修改IDE才能了解Lombok生成的代码。这是通过运行下载的Lombok jar文件来完成的。

这里可以找到有关龙目岛工作原理的一个很好的总结,它有其优点和缺点。


小智 4

在Java EJB中你可以使用@Singleton:

@Singleton
@Startup
public class mySingleton {....}
Run Code Online (Sandbox Code Playgroud)

我通常也将它与@Startup 一起使用。

有关单例的更多信息请参见这里

希望有帮助。