Rya*_*chi 12 java enums enumeration
我试图找到一种方法来强制Java加载/初始化枚举类型(嵌套在包含静态Map的类中).
这对我很重要,因为枚举类型具有填充所述映射的构造函数,并且没有明确的方法来初始化此枚举,映射将保持为空.我试图使用Class.forName,但这似乎不起作用.
我想我可以创建一个枚举实例(并将其存储在其他集合或其他东西中),但我想知道是否有一种优雅的方法来做到这一点.
Pet*_*rey 10
引用类时会加载类.这适用于所有类.
您遇到的问题更可能是在任何静态块之前初始化Enum值.即你不能引用构造函数中静态块中的初始化.(通常在构造函数中初始化静态内容是一个坏主意)您需要在静态块中初始化Map,而不是构造函数.
尝试
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);
}
}
Run Code Online (Sandbox Code Playgroud)
你不能把地图的初始化放在Enum类型的静态初始化器中吗?
public enum SomeEnum
{
Member1, Member2, Member3 ...
private static Map<K, SomeEnum> map = ...;
static
{
...populate map...
}
...
Run Code Online (Sandbox Code Playgroud)
编辑:问题似乎是Enum成员定义需要先来.我想我只是掩盖了这一点.我修复了这个例子.
| 归档时间: |
|
| 查看次数: |
16780 次 |
| 最近记录: |