好吧,现在我有了我的Map,但它无论如何都不起作用。比如,当我试着这么做的时候:
Status inStatus = Enum.valueOf(Status, ENUM_MAP.get(02));
结果是空的:
是的。
我在java工作,基本上,现在我有:
private static final HashMap<Integer,Status> ENUM_MAP =
new HashMap<Integer,Status>();
...
ENUM_MAP.put(0, Status.A);
ENUM_MAP.put(1, Status.B);
ENUM_MAP.put(2, Status.C);
而且很有效。但我想要我的 enum
在内部这样做,但不起作用。
public static enum Status{
A(0),B(1),C(2);
protected static final HashMap<Integer,Status> ENUM_MAP =
new HashMap<Integer,Status>();
private final Integer state;
private Status(Integer state){
this.state = state;
ENUM_MAP.put(this.state,**this**);
}
}
这就是我想弄明白的,这样我就不用写了,而且它可以很容易地由enum构建。注意,我不希望state是公共的,我也不知道如何从序数整数到名称的字符串版本(如果有办法的话,这会使事情简单化。)
编辑:
这似乎是最好的工作,只有两个额外的行(虽然我的编译器告诉我它是泄漏的),它保持我的Map作为私人,因为我想它。
private static final Map<Integer,Status> ENUM_MAP=new HashMap<>();
public static enum Status{
A(0),B(1),C(2);
private final Integer state;
private Status(Integer state){
this.state=state;
ENUM_MAP.put(this.state, this);
}//end private Status(int state)
4条答案
按热度按时间rekjcdws1#
可以使用静态块:
avwztpqn2#
可以使用内部类保存静态Map:
我不想州是公开的-如果州是你Map的关键,你可能会发送州,所以我不理解你的评论
wz8daaqr3#
您可以在搜索值时根据需要填充Map。不能在构造函数中将值添加到Map中。
下面是您可以做的事情(无论如何,您必须使查找方法可用):
lbsnaicq4#
枚举Map的这一行定义(尽管很长)是最终的且不可变的,如果您添加更多,它将包含所有状态值。作为公共成员共享是安全的-不允许进行后续更改,因为声明使用
Map.copyOf()
:枚举Map的值由所有枚举值按键状态初始化为枚举的值。
这个示例程序演示如何按状态或名称查找枚举值-包括
Status.valueOf(String)
:这张照片:
电话
Status.valueOf("A")
与相同Enum.valueOf(Status.class, "A")
.