繁体   English   中英

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

[英]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;
    } 
}

尽管也许更好的方法是创建一个包含您的StringsList ,然后检查该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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM