首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >枚举的详尽switch语句的静态分析

枚举的详尽switch语句的静态分析
EN

Stack Overflow用户
提问于 2018-05-30 22:55:57
回答 1查看 584关注 0票数 3

考虑以下代码:

代码语言:javascript
运行
复制
enum MyEnum {
  A, B, C;
}

int foo(MyEnum e) {
  switch (e) {
    case A:
      return 1;
    case B:
      return 2;
    case C:
      return 3;
  }
}
^ error: missing return statement

编译器不喜欢这样。将此示例与以下示例进行对比:

代码语言:javascript
运行
复制
int bar() {
  if (...) {
    return 1;
  } else {
    return 2;
  }
}

交换机的问题可以通过default案例来解决,但您可以认为这里不需要这样做。所有枚举值都包含在switch的例子中。对switch语句的静态分析是否知道,在穷举switch中返回的情况下,switch语句之后的代码块是无法访问的?

我试着查看language spec,但我没有清楚地看到这一点。

EN

回答 1

Stack Overflow用户

发布于 2018-05-30 23:29:50

当然,Java本身并不像C/C++或.NET那样实现枚举,它们只是一个(最终)类的实例。因此,实际上,您的运算符==比较的是引用相等,而不是您可能建议的整数值。

这就是switch语句不完整的原因。引用可能只是null

此外,您可能已经使用公共构造函数定义了自己的enum类,该构造函数可以创建任意数量的实例。

顺便说一句:到目前为止实现foo方法的最简单方法是

代码语言:javascript
运行
复制
int foo(MyEnum e)
{ return e.ordinal() + 1;
}

但请注意,.ordinal()不会返回与枚举常量相关的任何值。它只是按定义顺序排列的索引。

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

https://stackoverflow.com/questions/50607799

复制
相关文章

相似问题

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