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

时间:2017-04-27 00:49:43

标签: java android annotations

我在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;
    }
}

我认为现在对我来说这是一个非常糟糕的解决方案,我觉得“还有其他方法可以解决我的问题”。

感谢您的支持。

1 个答案:

答案 0 :(得分:2)

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

public MessageCall(String message) {

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

虽然可能更好的方法是创建一个包含List的{​​{1}},然后检查Strings是否包含该消息。

List