[英]How to validate a String is in enumerated annotations or not
我在Java中有一个Enum
,然后将其更改为enumerated annotations
,如下所示:
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;
}
}
尽管也许更好的方法是创建一个包含您的Strings
的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");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.