gpt4 book ai didi

java - 在 switch/case 中使用枚举

转载 作者:太空狗 更新时间:2023-10-29 22:42:52 25 4
gpt4 key购买 nike

我有一个具有枚举属性的实体:

// MyFile.java
public class MyFile {
private DownloadStatus downloadStatus;
// other properties, setters and getters
}

// DownloadStatus.java
public enum DownloadStatus {
NOT_DOWNLOADED(1),
DOWNLOAD_IN_PROGRESS(2),
DOWNLOADED(3);

private int value;
private DownloadStatus(int value) {
this.value = value;
}

public int getValue() {
return value;
}
}

我想将这个实体保存在数据库中并检索它。问题是我将 int 值保存在数据库中,然后我得到了 int 值!我不能像下面这样使用开关:

MyFile file = new MyFile();
int downloadStatus = ...
switch(downloadStatus) {
case NOT_DOWNLOADED:
file.setDownloadStatus(NOT_DOWNLOADED);
break;
// ...
}

我该怎么办?

最佳答案

您可以在您的枚举中提供一个静态方法:

public static DownloadStatus getStatusFromInt(int status) {
//here return the appropriate enum constant
}

然后在你的主代码中:

int downloadStatus = ...;
DowloadStatus status = DowloadStatus.getStatusFromInt(downloadStatus);
switch (status) {
case DowloadStatus.NOT_DOWNLOADED:
//etc.
}

与顺序方法相比,这种方法的优势在于,如果您的枚举更改为类似以下内容,它仍然可以工作:

public enum DownloadStatus {
NOT_DOWNLOADED(1),
DOWNLOAD_IN_PROGRESS(2),
DOWNLOADED(4); /// Ooops, database changed, it is not 3 any more
}

请注意,getStatusFromInt 的初始实现可能使用序号属性,但该实现细节现在包含在枚举类中。

关于java - 在 switch/case 中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com