有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对许多常量使用枚举是有效的memorywise?

我有一个类似这样的类:

public class MessageBuilder{

  private enum MsgCodes{

    CODE_1("some string"),
    CODE_2("another string"),
    CODE_3("you get the idea");

    private String msg;

    MsgCodes(String msg){
      this.msg = msg;
    }

    private String text(){
      return msg;
    }
  }

  private MessageBuilder(){
    //prevents initialization outside the class
  }

  //Gives synchronized behaviour to initialization without enforcing it into getInstance()
  private static class Loader{
    static MessageBuilder INSTANCE = new MessageBuilder();
  }

  public static MessageBuilder getInstance(){
    return Loader.INSTANCE;
  }

  public String buildMessage(String[] codes){
    String res = "";
    for(String code : codes){
      res += QAmsg.valueOf(code).text();
    }
    return res;
  }

}

我担心的是,随着应用程序的开发,这个类上的enum会越来越多(我知道这不仅是一种很好的方法,而且是只在一个类上使用常量的首选方法),我对enum比较陌生,所以我真的不知道如果这个列表变得“太大”会发生什么,这仍然是保持它们的有效方法吗

有没有一种不同的方法可以让我使用的不是整个列表,而是我当时使用的一个代码得到实例化?enum实例是否只会出现一次,还是每次我使用它们时都会出现

我将该类设置为单例类,认为这会阻止我多次实例化enum列表,但这可能是不必要的,因为我不完全理解enum行为


共 (1) 个答案

  1. # 1 楼答案

    枚举成员只是public static final常量,因此是单例。假设您的列表增加到10000个enum成员,每个成员的开销为1KB。即使在这些奢侈的假设下,它也将达到10MB的Java堆

    显然,您不应该担心枚举成员的内存消耗