java 枚举 getter setter
java enum getter setter
我正在使用来自 Web 服务的数据,将把该数据存储到数据容器 classes 中,然后在其他地方获取该数据。
对于特定字段,最合适的数据类型是枚举,因此我创建了以下枚举:
public enum EventStatus {
PENDING(1), OPEN(2), DISPATCHED(3), APPENDED(4), CLOSED(5), REQUESTED_TO_CLOSE(
6), ACTION_REQUESTED_FROM_POLICE_STATION(7), ACTION_REQUESTED_FROMD_ISPATCHER(
8), ACTION_REQUESTED_FROM_SUPERVISOR(9);
private int value;
private EventStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
}
此枚举在另一个 class 中使用如下:
public EventStatus getEventStatus() {
return eventStatus;
}
public void setEventStatus(EventStatus eventStatus) {
this.eventStatus = eventStatus;
}
现在,当我尝试设置如下值时:
event.setEventStatus(getAttributeValueInt(linkedEventElement, "status"));
相当于
event.setEventStatus(1);
我收到编译错误,方法不适用于参数(int)
我可以这样做的一种方法是这样的:
switch(getAttributeValueInt(linkedEventElement, "status")){
case 1:eventLinkedEvent.setEventStatus(EventStatus.PENDING);
//and so on...
}
但这破坏了枚举的唯一目的。
还有如何获取整数形式的事件状态值?
任何人都可以指导我如何继续吗?
在枚举本身中创建一个从值到枚举常量的映射。然后是 static
方法,它采用 int
类型和 returns enum
类型。
public enum EventStatus {
// constants
;
private final static Map<Integer, EventStatus> REVERSE_MAP = new HashMap<>();
static {
for (EventStatus status: values()) {
REVERSE_MAP.put(status.value, status);
}
}
public static EventStatus forValue(int value) {
return REVERSE_MAP.get(value);
}
}
枚举是 class。它不是 int 的简单别名,例如在 C 中。 1 是一个整数,而不是 EventStatus 的实例,并且您的方法需要一个 EventStatus 实例,因此不会编译。
只需在枚举中提供一个工厂方法,将一个 int 值转换为枚举:
public static EventStatus fromIntValue(int value) {
// iterate through the enum constants, returned by EventStatus.value(),
// and find the one with the given value
}
您还可以将枚举常量存储在 Map<Integer, EventStatus>
中以进行查找 O(1)。
您可以像这样创建枚举
public enum EventStatus {
PENDING(1), OPEN(2), DISPATCHED(3), APPENDED(4), CLOSED(5), REQUESTED_TO_CLOSE(
6), ACTION_REQUESTED_FROM_POLICE_STATION(7), ACTION_REQUESTED_FROMD_ISPATCHER(
8), ACTION_REQUESTED_FROM_SUPERVISOR(9);
private int value;
private EventStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
public static EventStatus getEventStatusById(int id) {
EventStatus event = null;
switch (id) {
case 1:
event = PENDING;
break;
case 2:
event = OPEN;
break;
case 3:
event = DISPATCHED;
break;
case 4:
event = APPENDED;
break;
case 5:
event = CLOSED;
break;
case 6:
event = REQUESTED_TO_CLOSE;
break;
case 7:
event = ACTION_REQUESTED_FROM_POLICE_STATION;
break;
case 8:
event = ACTION_REQUESTED_FROMD_ISPATCHER;
break;
case 9:
event = ACTION_REQUESTED_FROM_SUPERVISOR;
break;
default:
break;
}
return event;
}
}
之后您可以尝试在下面的行中设置 EventStatus
event.setEventStatus(EventStatus.getEventStatusById(getAttributeValueInt(linkedEventElement, "status")));
我觉得有用..
快速解决方案,因为您的序数(枚举索引)与您的值匹配(相差 1),请修改您的枚举 EventStatus
以包含 EventStatus
的新数组:-
public enum EventStatus {
PENDING(1), OPEN(2), DISPATCHED(3), APPENDED(4), CLOSED(5), REQUESTED_TO_CLOSE(
6), ACTION_REQUESTED_FROM_POLICE_STATION(7), ACTION_REQUESTED_FROMD_ISPATCHER(
8), ACTION_REQUESTED_FROM_SUPERVISOR(9);
private int value;
public static final EventStatus values[] = values();
private EventStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
}
现在代替这个:-
event.setEventStatus(getAttributeValueInt(linkedEventElement, "status"));
使用这个:-
event.setEventStatus(EventStatus.values[(getAttributeValueInt(linkedEventElement,"status"))-1)]);
这将return对应序数值的枚举值,例如:-
EventStatus.values[1-1]; //this will return EnumStatus.PENDING
-1
是因为您提供了从 1 开始的序数值。
我正在使用来自 Web 服务的数据,将把该数据存储到数据容器 classes 中,然后在其他地方获取该数据。
对于特定字段,最合适的数据类型是枚举,因此我创建了以下枚举:
public enum EventStatus {
PENDING(1), OPEN(2), DISPATCHED(3), APPENDED(4), CLOSED(5), REQUESTED_TO_CLOSE(
6), ACTION_REQUESTED_FROM_POLICE_STATION(7), ACTION_REQUESTED_FROMD_ISPATCHER(
8), ACTION_REQUESTED_FROM_SUPERVISOR(9);
private int value;
private EventStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
}
此枚举在另一个 class 中使用如下:
public EventStatus getEventStatus() {
return eventStatus;
}
public void setEventStatus(EventStatus eventStatus) {
this.eventStatus = eventStatus;
}
现在,当我尝试设置如下值时:
event.setEventStatus(getAttributeValueInt(linkedEventElement, "status"));
相当于
event.setEventStatus(1);
我收到编译错误,方法不适用于参数(int)
我可以这样做的一种方法是这样的:
switch(getAttributeValueInt(linkedEventElement, "status")){
case 1:eventLinkedEvent.setEventStatus(EventStatus.PENDING);
//and so on...
}
但这破坏了枚举的唯一目的。
还有如何获取整数形式的事件状态值?
任何人都可以指导我如何继续吗?
在枚举本身中创建一个从值到枚举常量的映射。然后是 static
方法,它采用 int
类型和 returns enum
类型。
public enum EventStatus {
// constants
;
private final static Map<Integer, EventStatus> REVERSE_MAP = new HashMap<>();
static {
for (EventStatus status: values()) {
REVERSE_MAP.put(status.value, status);
}
}
public static EventStatus forValue(int value) {
return REVERSE_MAP.get(value);
}
}
枚举是 class。它不是 int 的简单别名,例如在 C 中。 1 是一个整数,而不是 EventStatus 的实例,并且您的方法需要一个 EventStatus 实例,因此不会编译。
只需在枚举中提供一个工厂方法,将一个 int 值转换为枚举:
public static EventStatus fromIntValue(int value) {
// iterate through the enum constants, returned by EventStatus.value(),
// and find the one with the given value
}
您还可以将枚举常量存储在 Map<Integer, EventStatus>
中以进行查找 O(1)。
您可以像这样创建枚举
public enum EventStatus {
PENDING(1), OPEN(2), DISPATCHED(3), APPENDED(4), CLOSED(5), REQUESTED_TO_CLOSE(
6), ACTION_REQUESTED_FROM_POLICE_STATION(7), ACTION_REQUESTED_FROMD_ISPATCHER(
8), ACTION_REQUESTED_FROM_SUPERVISOR(9);
private int value;
private EventStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
public static EventStatus getEventStatusById(int id) {
EventStatus event = null;
switch (id) {
case 1:
event = PENDING;
break;
case 2:
event = OPEN;
break;
case 3:
event = DISPATCHED;
break;
case 4:
event = APPENDED;
break;
case 5:
event = CLOSED;
break;
case 6:
event = REQUESTED_TO_CLOSE;
break;
case 7:
event = ACTION_REQUESTED_FROM_POLICE_STATION;
break;
case 8:
event = ACTION_REQUESTED_FROMD_ISPATCHER;
break;
case 9:
event = ACTION_REQUESTED_FROM_SUPERVISOR;
break;
default:
break;
}
return event;
}
}
之后您可以尝试在下面的行中设置 EventStatus
event.setEventStatus(EventStatus.getEventStatusById(getAttributeValueInt(linkedEventElement, "status")));
我觉得有用..
快速解决方案,因为您的序数(枚举索引)与您的值匹配(相差 1),请修改您的枚举 EventStatus
以包含 EventStatus
的新数组:-
public enum EventStatus {
PENDING(1), OPEN(2), DISPATCHED(3), APPENDED(4), CLOSED(5), REQUESTED_TO_CLOSE(
6), ACTION_REQUESTED_FROM_POLICE_STATION(7), ACTION_REQUESTED_FROMD_ISPATCHER(
8), ACTION_REQUESTED_FROM_SUPERVISOR(9);
private int value;
public static final EventStatus values[] = values();
private EventStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
}
现在代替这个:-
event.setEventStatus(getAttributeValueInt(linkedEventElement, "status"));
使用这个:-
event.setEventStatus(EventStatus.values[(getAttributeValueInt(linkedEventElement,"status"))-1)]);
这将return对应序数值的枚举值,例如:-
EventStatus.values[1-1]; //this will return EnumStatus.PENDING
-1
是因为您提供了从 1 开始的序数值。