gpt4 book ai didi

java - 基于字符串内容的枚举 valueof

转载 作者:行者123 更新时间:2023-12-01 22:27:34 26 4
gpt4 key购买 nike

我正在尝试使用枚举来包装应用程序中的某些错误代码。

public enum ErrorStatus
{
PAGE_NOT_FOUND("http 404", "lorem ipsum")
private final String code;
private final String description;
private ErrorStatus(String code, String description)
{
this.code = code;
this.description = description;
}
public String getDescription()
{
return description;
}
}

当我收到错误时,它是一个带有代码的字符串,例如“http 404”。

“http 404”(或任何其他错误代码)似乎不是一个清晰易读的枚举名称:

http_404("page not found", "lorem ipsum")

我发现valueOf()name()方法无法被重写,我想防止其他人错误地使用valueOf() 在字符串值上,而不是具有不同名称的自定义实现。

将枚举映射到该字符串值的最简洁方法是什么?

最佳答案

编辑:阅读您的评论后,我认为您正在寻找类似的东西。

import java.util.HashMap;
import java.util.Map.Entry;


public enum ErrorStatus {

PAGE_NOT_FOUND("404", "Description for error 404");

private static final HashMap<String, ErrorStatus> ERRORS_BY_CODE;
private static final HashMap<String, ErrorStatus> ERRORS_BY_DESCR;
static {
ERRORS_BY_CODE = new HashMap<String, ErrorStatus>();
ERRORS_BY_CODE.put("404", PAGE_NOT_FOUND);
ERRORS_BY_DESCR = new HashMap<String, ErrorStatus>();
ERRORS_BY_DESCR.put("Description for error 404", PAGE_NOT_FOUND);
}

所以这里最重要的是使用HashMap,就像ZouZou建议的那样。如果您想通过给定的代码有效查找描述,您将需要一个映射,如果您想通过给定的描述有效地查找代码,您将需要一个映射也是。

如果您有像“404”“500”这样的字符串,并且想要获取相应的描述,您可以使用

public static ErrorStatus getErrorByCode(String code) {
return ERRORS_BY_CODE.get(code);
}

如果您有类似“404错误描述”的描述,并且想要获取相应的错误代码,您可以使用

public static ErrorStatus getErrorByDescr(String descr) {
return ERRORS_BY_DESCR.get(descr);
}

如果你只有一个包含描述的字符串,那就有点糟糕了。这不是最有效的方法,但假设您不会有那么多错误代码,那就没问题了。因此,如果我们有一个类似“Here is the description of the page not find error 'Description for error 404'”的字符串,那么您可以使用

public static ErrorStatus getErrorByString(String str) {
for (Entry<String, ErrorStatus> entry : ERRORS_BY_DESCR.entrySet()){
if (str.contains(entry.getKey())) {
return entry.getValue();
}
}
return null;
}

要小心最后一个方法,因为如果没有找到任何内容,它会返回 null,并且只给出它成功的第一个错误对象(虽然代码中可以有多个错误描述)。

关于java - 基于字符串内容的枚举 valueof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459334/

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