首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用默认抛出子句的枚举?

使用默认抛出子句的枚举?
EN

Stack Overflow用户
提问于 2010-05-21 03:07:53
回答 5查看 1.7K关注 0票数 1

在这里关于枚举的部分中,我注意到Java语言规范中的以下内容:link

代码语言:javascript
复制
switch(this) {
  case PLUS:   return x + y;
  case MINUS:  return x - y;
  case TIMES:  return x * y;
  case DIVIDE: return x / y;
}
throw new AssertionError("Unknown op: " + this);

但是,查看switch语句定义部分,我在任何地方都没有注意到这种特定的语法(相关的throw语句)。

我可以在枚举定义之外使用这种“默认情况是抛出异常”的语法糖吗?它有什么特别的名字吗?这是否被认为是一种好的/坏的做法来缩短这种“任何不在列表中的东西都会抛出异常”的行为?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-21 03:11:18

我不确定我是否理解了您的意思,但是您似乎相信在前面的代码示例中,throwswitch语法的一部分。事实并非如此。switch块和throw语句是两个独立的东西,在这段代码中,它们恰好放在一起。

更详细地说:switch中的四个case部件都包含return语句,导致该方法中的任何后续指令都被跳过。如果没有匹配的case部件,则在switch块之后的行上继续执行,该块恰好是一个throw

您可以以非常类似的方式在if之后使用throw

代码语言:javascript
复制
if (something) {
    return aValue;
}

throw new Exception("Nope");
票数 2
EN

Stack Overflow用户

发布于 2010-05-21 03:52:05

本教程的作者为抛出AssertionError而感到羞愧--为什么不利用Java语言已经提供的异常,比如UnsupportedOperationException

票数 3
EN

Stack Overflow用户

发布于 2010-05-21 03:11:35

有一个default关键字:

代码语言:javascript
复制
switch (whatever) {
  // ...
  default: explode();
}

如果希望缺省情况抛出异常,则

代码语言:javascript
复制
  default: throw new Explode();

您的示例只能按照它的方式工作,因为所有其他分支都是从包含的函数返回的。在我看来,这不是一个很好的编码习惯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2876988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档