gpt4 book ai didi

java - 如何验证字符串是否在枚举注释中

转载 作者:行者123 更新时间:2023-12-02 02:52:09 24 4
gpt4 key购买 nike

我在 Java 中有一个 Enum,我将其更改为 枚举注释,如下所示:

public static final String PING = "ping";
public static final String PING_BACK = "ping.back";
public static final String REQUEST_MODE_NORMAL = "request_mode_normal";
public static final String ERROR_MESSAGE = "error_message";

@StringDef({PING, PING_BACK, REQUEST_MODE_NORMAL, ERROR_MESSAGE})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
}

@MessageCall.Type
private String mMessage;

现在我有另一个由用户输入的String值,我想将其传递到mMesssage字段。这是编译时的未知值,所以我必须这样检查:

public MessageCall(String message) {
switch (message) {
case PING:
mMessage = PING;
break;
case PING_BACK:
mMessage = PING_BACK;
break;
case REQUEST_MODE_NORMAL:
mMessage = REQUEST_MODE_NORMAL;
break;
default:
mMessage = ERROR_MESSAGE;
}
}

我认为现在这对我来说是非常糟糕的解决方案,我感到“还有其他解决方案来解决我的问题”。

感谢您的支持。

最佳答案

由于您主要只是将现有值重新分配给新变量,因此您可以这样做:

public MessageCall(String message) {

if (message.equals(PING) ||
message.equals(PING_BACK) ||
message.equals(REQUEST_MODE_NORMAL))
{
mMessage = message;
}
else {
mMessage = ERROR_MESSAGE;
}
}

虽然也许更好的方法是创建一个包含您的字符串List,然后检查List是否包含消息.

List<String> messages = Arrays.asList("ping", "ping_back");
if (messages.contains("ping")) {
System.out.println("message is ping");
}
if (!messages.contains("test")) {
System.out.println("no message for test");
}

关于java - 如何验证字符串是否在枚举注释中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43646833/

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