当前位置: 首页 > 面试题库 >

为什么在案例标签中无法获得Enum常量引用?

周志文
2023-03-14
问题内容

将case语句更改为以下代码后,为什么以下代码无法编译

case ENUM1: doSomeStuff();

作品?

public enum EnumType
{
    ENUM1, ENUM2, ENUM3;

    void doSomeStuff()
    {
        switch(this)
        {
        case EnumType.ENUM1: doSomeStuff();
        }
    }
}

问题答案:

这是为了避免针对不同枚举类型进行比较的能力。 将它限制为 一种 类型(即 switch语句中的枚举值的类型)是有意义的。

更新 :实际上是为了保持二进制兼容性。以下是JLS
第13.4.9章中途引用的内容:

要求内联常量的一个原因是,switch
语句中的每个都需要常量case,并且两个这样的常量值不能相同。编译器switch在编译时检查语句中是否有重复的常量值。该class
文件格式没有做的情况下价值观的象征性的联系。

换句话说,由于中的类标识符EnumType.ENUM1,它不能被表示为编译时常量表达式,而该switch语句是必需的。



 类似资料:
  • 我收到的错误: 这是我的代码 我尝试了几种不同的方法来读取此文件,但我无法弄清楚为什么会发生这种情况。我使用的扩展名.rtf,.txt,认为这可能是文件本身的问题。该文件仅包含以下内容:

  • 问题内容: 我正在尝试在片段中使用RecyclerView。对于第一个选项卡,它显示得很好,但是当我滑动到第二个选项卡然后又回到第一个选项卡时,出现以下错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.support.v7.widget.RecyclerView $ LayoutManager.stopSmoothSc

  • 嗨, 我正在一个项目工作,我需要从Instagram实时更新的某些标签。 这是我创建订阅的代码 输出为: 这是callback.php的代码: activity.log中的一行是: [{“changed_aspect”:“media”,“object”:“tag”,“object_id”:“winter”,“time”:1385411793,“subscription_id”:3932963,“d

  • 如问题所示,值可变的lambda捕获不适用于常量 但是为什么对不可变的lambda也这样做呢?在不可变lambda中,声明为,因此它无论如何都不能修改捕获的值。 当我们移动lambda时,这种情况的坏后果就会发生,例如,当我们将lambda包装在一个中时。 请参见以下两个示例: 我们得到以下编译器生成的lambda类: 程序打印以下内容(使用gcc或clang): 在第一个示例中,至少复制了三次值

  • 我编写了这段代码,将整个以10为基数的数字转换成二进制。我相信代码就是它所需要的一切,但我无法让工作。 我在这个网站和其他网站上花了几个小时,尝试了无数次的修改,但都没有用。 我已经让代码无错误地编译,但一旦我运行它并输入程序就会崩溃。 下面是代码: 这些是java在我输入数字时抛出的异常。 我希望这是足够的信息。

  • 问题内容: 当我编译这段代码时,编译器告诉我我 不能使用str(s)的地址 。 所以我的问题是 类型转换 是否会寻找新地址来定位当前的new ,还是我没有想到的其他东西? 问题答案: Go编程语言规范 表达方式 表达式通过将运算符和函数应用于操作数来指定值的计算。 转换次数 转换是形式为T(x)的表达式,其中T是类型,x是可以转换为类型T的表达式。 地址运算符 对于类型T的操作数x,地址操作&x生