我在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;
}
}
我认为现在对我来说这是一个非常糟糕的解决方案,我觉得“还有其他方法可以解决我的问题”。
感谢您的支持。
答案 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