如何使用枚举创建单例类

Pra*_*p S 8 java singleton enums

我试图在Java中创建一个单例类.Java5及以上版本的最佳可用解决方案似乎正在使用enum.但我不知道如何使用我的类转换为单例类enum.以下是我的简化课程:

public class Employee { 
   private int id; 
   private String name; 
   public Employee() {} 
   public int getId() {
      return id; 
   }
   public void setId( int id ) { 
      this.id = id; 
   } 
   public String getName() { 
      return name; 
   } 
   public void setName( String name ) {
      this.name = name; 
   }
}
Run Code Online (Sandbox Code Playgroud)

当我在网上搜索答案时,我发现了以下代码:

public enum EasySingleton{
   INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)

但是我的类变量和方法在哪里?我不知道如何实现这一点.我知道我们可以提供方法,enum但我的变量在哪里?任何有关这方面的帮助将非常感激.

PS:如果单身人士是邪恶的或反模式,请不要辩论.我只是想知道如何创建一个单身人士enum.

sla*_*dan 12

类和枚举之间的差异并不大.我更改了第一行代码public enum而不是public class添加了实例的名称.

public enum Employee { // changed "class" to "enum"

   INSTANCE; // added name of the (single) instance

   private int id; 
   private String name; 
   Employee() {} // removed "public"
   public int getId() {
      return id; 
   }
   public void setId( int id ) { 
      this.id = id; 
   } 
   public String getName() { 
      return name; 
   } 
   public void setName( String name ) {
      this.name = name; 
   }
}
Run Code Online (Sandbox Code Playgroud)

请记住,如果你想在一个vm中多次运行你的代码,singeltons,枚举实例,静态事物可能会在以后阻碍你.考虑Employee在主类中创建一个实例并将其传递给您的应用程序.

除此之外,枚举还有一些其他特殊功能:

  • 你不能extend另一个班(只implements)
  • 一些预定义的方法(如static values()getName())可用
  • 构造函数只能是包私有或私有