我试图找到一种方法来强制 Java 加载/初始化枚举类型(嵌套在包含静态 Map 的类中)。
这对我来说很重要,因为枚举类型有一个填充所述映射的构造函数,并且如果没有显式方法来初始化此枚举,则映射将保持为空。我尝试过使用Class.forName
,但这似乎不起作用。
我想我可以创建枚举的实例(并将其存储在其他集合或其他东西中),但我想知道是否有一种优雅的方法来做到这一点。
当您引用一个类时,就会加载一个类。这对于所有类别都适用。
您遇到的问题更可能是在任何静态块之前初始化枚举值。即,您不能在构造函数的静态块中引用初始化的内容。 (通常在构造函数中初始化静态内容是一个坏主意)您需要在静态块中初始化 Map,而不是构造函数。
Try
import java.util.Map;
import java.util.HashMap;
public enum EnumTest {
FOO, BAR, BAZ;
private static final Map<String,EnumTest> map = new LinkedHashMap<String,EnumTest>();
static {
for(EnumTest e : EnumTest.values())
map.put(e.name(), e);
}
public static void main(String... args) {
System.out.println(EnumTest.map);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)