当前位置: 首页 > 知识库问答 >
问题:

Enum的values()方法的文档在哪里?

长孙谦
2023-03-14

声明枚举为:

enum Sex {MALE,FEMALE};

然后,如下所示迭代枚举:

for(Sex v : Sex.values()){
    System.out.println(" values :"+ v);
}

我检查了Java API,但找不到values()方法?我很好奇这种方法是从哪里来的?

API链接:https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html

共有3个答案

乐正晟
2023-03-14

运行这个

    for (Method m : sex.class.getDeclaredMethods()) {
        System.out.println(m);
    }

你会看到的

public static test.Sex test.Sex.valueOf(java.lang.String)
public static test.Sex[] test.Sex.values()

这些都是“性”类的公开方法。它们不在源代码javac中。exe添加了它们

注意事项:

>

  • 永远不要使用sex作为类名,很难阅读代码,我们在Java中使用sex

    当遇到像这样的Java难题时,我建议使用字节码反编译工具(我使用Andrey Loskutov的字节码大纲eLispe插件)。这将显示类中的所有内容

  • 喻昀
    2023-03-14

    方法是隐式定义的(即由编译器生成)。

    来自JLS:

    此外,如果Eenum类型的名称,则该类型具有以下隐式声明静态方法:

    /**
    * Returns an array containing the constants of this enum 
    * type, in the order they're declared.  This method may be
    * used to iterate over the constants as follows:
    *
    *    for(E c : E.values())
    *        System.out.println(c);
    *
    * @return an array containing the constants of this enum 
    * type, in the order they're declared
    */
    public static E[] values();
    
    /**
    * Returns the enum constant of this type with the specified
    * name.
    * The string must match exactly an identifier used to declare
    * an enum constant in this type.  (Extraneous whitespace 
    * characters are not permitted.)
    * 
    * @return the enum constant with the specified name
    * @throws IllegalArgumentException if this enum type has no
    * constant with the specified name
    */
    public static E valueOf(String name);
    
    陆烨磊
    2023-03-14

    在javadoc中看不到这个方法,因为它是由编译器添加的。

    记录在三个地方:

    • 枚举类型,来自Java教程

    编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态值方法,该方法返回一个数组,该数组按声明的顺序包含枚举的所有值。此方法通常与for each构造结合使用,以迭代枚举类型的值。

    • Enum。valueOfclass
      (特殊的隐式values方法在valueOf方法的描述中提到)

    枚举类型的所有常量都可以通过调用该类型的隐式公共静态T[]值()方法获得。

    • 枚举类型,第8.9节,Java语言规范

    values函数只列出枚举的所有值。

     类似资料:
    • 本文向大家介绍java 中枚举类enum的values()方法的详解,包括了java 中枚举类enum的values()方法的详解的使用技巧和注意事项,需要的朋友参考一下 java 中枚举类enum的values()方法的详解 前言:  关于枚举,相信使用的已经很普遍了,现在主要写的是枚举中的一个特殊方法,values(), 为什么说特殊呢,因为在Enum 的 API 文档中也找不到这个方法。接下

    • 我正在使用[ws][1]学习JavaScript中的WebSocket,我阅读了与之相关的大部分文档,但我找不到任何关于“on”方法或函数的文档,因为我想知道这个“on”方法是如何工作的。如果有人熟悉websocket.server中的“on”方法,如果能帮助我,我将不胜感激。例如,在文档中,有这样的代码: 但是我找不到任何适合“on”方法的文档。[1]:https://www.npmjs.com

    • 问题内容: 可在类中使用的特殊双下划线/底线方法的完整列表在哪里?(例如,,,,) 问题答案: 请查看Python语言参考中的特殊方法名称部分。

    • 问题内容: 考虑我创建一个LinkedHashMap,如下所示: 当我打电话给我时,有没有给我订购一套?如果我打电话给我,这些也是吗? 编辑 很抱歉,是有序的,没有排序。 问题答案: 首先是 有序 但没有 排序 。被 排序 (并因此 有序 以及)。 这就是说,你不能指望的输出,并进行排序。实际上,JavaDoc说 与订单无关 (事实证明,顺序 是 :由JavaDoc的保证是保证键和值从一个Link

    • 问题内容: 我是Pandas的新手,正在尝试使用。我遇到了,和这样的各种好东西,而且我希望能够快速查找适当的字符串以得到我想要的东西。昨天我在文档中的某个地方找到了一个格式良好的表,但是该表的标题太钝了,以至于我今天无法使用搜索再次找到它。 问题答案: 您可以找到它称为Offset Aliases: 为有用的通用时间序列频率提供了许多字符串别名。我们将这些别名称为偏移别名。

    • 问题内容: 我有一个方法可以说: 正如您所注意到的,我有一个名为align的参数。在此方法内部,我将对值是“左”还是“右”有一些if条件。.将参数设置为String,显然我可以传递任何字符串值..我想知道是否有可能将Enum值用作方法参数,如果是,如何? 以防万一有人想到这个;我考虑过使用布尔值,但我并不喜欢它。首先,如何将true / false与left / right关联?(好的,我可以使用