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

与枚举类型混淆

蔺霄
2023-03-14
问题内容

为什么在定义枚举时将其传递给字段名称列表,然后为什么这些字段名称(例如Days.MONDAY)最终引用字段
呢?我可以传递一个字段(例如Days.MONDAY),然后使用开关获取该字段的值。更奇怪的是,当我声明枚举字段时,即使它们实际上是值,我什至不必用引号将它们引起来。


问题答案:

将Java枚举视为定义类的一种不错的语法。这是一个可能有帮助的shell脚本:

$ cat > Direction.java
public enum Direction {NORTH, EAST, SOUTH, WEST}
$ javac Direction.java 
$ javap Direction
Compiled from "Direction.java"
public final class Direction extends java.lang.Enum{
    public static final Direction NORTH;
    public static final Direction EAST;
    public static final Direction SOUTH;
    public static final Direction WEST;
    public static Direction[] values();
    public static Direction valueOf(java.lang.String);
    static {};
}

是的,您可以说EAST是class的一个字段,Direction其值是class的一个实例Direction。我们引用该值Direction.EAST的方式与您通过任何其他类的静态字段引用值的方式相同。

可能是由于您看不到这样的声明而造成的困惑

public static final Direction.EAST = SOMETHING_OR_OTHER_HERE;

这是可以理解的。枚举旨在初始化这些字段值,但您不必自己显式初始化它们。好像你说的

public static final Direction.EAST = new Direction();

实际上,这是所谓的“ Typesafe枚举”模式的一部分,该模式在Java获得当前的枚举语法之前就已普遍使用。

关于您对引号的评论,因为没有涉及任何字符串,因此根本没有理由引用任何东西。

关于您对开关的评论,是的,在这里如何显示字段名称和字段值的概念有些有趣。但这仅仅是因为该值看起来像字段。换句话说,field EASTin
的值DirectionDirection.EAST。但是,如果您考虑一下,它与文字并没有太大区别。Float.NaN您可能会问什么价值?好吧Float.NaN。不透明值的种类。



 类似资料:
  • 枚举是为了让程序可读性更好,比如用来描述用户的角色,普通的会员、付费的会员等,同时也限定了用户角色的种类,保证安全性,不会出现上帝角色这种乱入的东西。 枚举的类别与写法 默认值从0开始,依次递增,这个你应该还记得。 普通的枚举 let str = 'something' enum test{ test01, } enum FileAccess { None, Read

  • 枚举类型(也可以称为“枚举器”)由一组具有独立标识符(名称)的整数类型常量构成,在 C# 中枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型中成员的默认值是从 0 开始的,然后逐一递增。 在 C# 中可以使用 enum 关键字来声明枚举类型,语法格式如下所示: enum enum_name{     enumeration list; } 其中,enum_n

  • 上一章我们谈到了从真实世界的值(如扑克牌中的大小和花色)到程序世界内部表示(如整数或字符串)的映射。虽然我们实现了牌面大小和整型数、花色和整型数之间的映射,但必须指出,映射本身并没有成为程序的一部分。 实际上,C++提供了一种称为“枚举类型”的特性使以下两点成为可能,一是将映射作为程序的一部分,一是定义了组成映射的值的集合。比如,牌的花色(Suit)和大小(Rank)可以以枚举的形式定义: enu

  • 创建枚举 import enum class BugStatus(enum.Enum): new = 7 incomplete = 6 invalid = 5 wont_fix = 4 in_progress = 3 fix_committed = 2 fix_released = 1 print('\nMember name: {}'.

  • 问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S

  • 枚举类(“新的枚举”/“强类型的枚举”)主要用来解决传统的C++枚举的三个问题: 传统C++枚举会被隐式转换为int,这在那些不应被转换为int的情况下可能导致错误 传统C++枚举的每一枚举值在其作用域范围内都是可见的,容易导致名称冲突(同名冲突) 不可以指定枚举的底层数据类型,这可能会导致代码不容易理解、兼容性问题以及不可以进行前向声明 枚举类(enum)(“强类型枚举”)是强类型的,并且具有类