5

我有一个在 Web 服务实现中定义为枚举的帐户类型列表。但是,当消费者调用 Web 服务时,它会传递一个需要转换为枚举的字符串。

什么是验证给定字符串将成功转换为枚举的好方法?

我正在使用以下方法,但这可能是对异常的滥用(根据 Effective Java,第 57 项)。

AccountType accountType = null;
try{
    accountType = AccountType.valueOf(accountTypeString);
}catch(IllegalArgumentException e){
    // report error
}

if (accountType != null){
    // do stuff
}else{
    // exit
}
4

4 回答 4

2

我个人使用了 Apache Commons 库中的EnumUtils

该库包含许多有用的实用程序类(例如,也用于字符串),是任何 Java 项目中必不可少的,而且非常轻巧(300ko)。

这是我使用的示例代码:

TypeEnum strTypeEnum = null;

// test if String str is compatible with the enum 
if( EnumUtils.isValidEnum(TypeEnum.class, str) ){
    strTypeEnum = TypeEnum.valueOf(str);
}
于 2013-03-01T12:58:04.130 回答
2

您可以查看枚举值并检查每个文字的名称是否等于您的字符串,例如

for (Test test : Test.values()) {
    if (str.equals(test.name())) {
        return true;
    }
}
return false;

枚举是:

public enum Test {
    A,
    B,
}

您也可以返回枚举常量或 null,因为枚举通常很小,这不会是性能问题。

于 2012-06-22T20:01:23.833 回答
1

您可以捕获 IllegalArgumentException,当给出错误值时将抛出该异常。

于 2012-06-22T19:52:49.907 回答
0

使用Optional来自 Guava 的数据类型。

让你的方法AccountType.valueOf返回 type 的值Optional<AccountType>。然后使用站点代码将变为:

Optional<AccountType> accountType = AccountType.valueOf(accountTypeString));
if (accountType.isPresent()) {
  AccountType a = accountType.get();
  // do stuff
} else {
  // exit
}
于 2012-06-22T20:54:00.573 回答