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 楼答案
枚举成员只是
public static final
常量,因此是单例。假设您的列表增加到10000个enum成员,每个成员的开销为1KB。即使在这些奢侈的假设下,它也将达到10MB的Java堆显然,您不应该担心枚举成员的内存消耗