我声明枚举为:
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
运行这个
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插件)。这将显示类中的所有内容
方法是隐式定义的(即由编译器生成)。
来自JLS:
此外,如果E
是enum
类型的名称,则该类型具有以下隐式声明的静态
方法:
/**
* 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);
在javadoc中看不到这个方法,因为它是由编译器添加的。
记录在三个地方:
编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态值方法,该方法返回一个数组,该数组按声明的顺序包含枚举的所有值。此方法通常与for each构造结合使用,以迭代枚举类型的值。
Enum。valueOf
classvalues
方法在valueOf
方法的描述中提到)枚举类型的所有常量都可以通过调用该类型的隐式公共静态T[]值()方法获得。
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关联?(好的,我可以使用