将无效字符串传递给 Java 枚举 .valueOf 调用时会产生什么结果?

新手上路,请多包涵

当您将空的 String (或其他一些无法识别的值,或 null )传递给 Java 枚举 .valueOf 时会产生什么结果?

例如:

 public enum Status
{
   STARTED,
   PROGRESS,
   MESSAGE,
   DONE;
}

接着

String empty = "";

switch(Status.valueOf(empty))
{
   case STARTED:
   case PROGRESS:
   case MESSAGE:
   case DONE:
   {
      System.out.println("is valid status");
      break;
   }
   default:
   {
      System.out.println("is not valid");
   }
}


基本上,我想知道如果我在枚举中使用 switch 语句,会调用 default case 还是会出现某种异常?

原文由 Jay R. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 573
2 个回答

你应该得到一个 IllegalArgumentException 如果名称不是枚举的名称(它不会用于空字符串)。这是在所有枚举 valueOf 方法的 API 文档中生成的。你应该得到一个 NullPointerException 对于 null 。给你的 String 变量一个虚拟值可能不是一个好主意(也不允许最后一个 case / default )。

原文由 Tom Hawtin - tackline 发布,翻译遵循 CC BY-SA 2.5 许可协议

我刚刚试过你的代码。它抛出一个 IllegalArgumentException 。就像文档说的那样。

原文由 Etienne de Martel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题