对此问题的评论:A 'for' loop to iterate over an enum in Java状态:
@jacktrades: It is an implicit method that exists only in the compiler. Therefore the base class can not declare a method with the same name and thus it does not get included in the automatically generated Javadocs. docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2 – Torben Mar 5 at 9:32
由于此方法仅存在于编译器中,这是否意味着它在 Enum 对象在 jdk1.5 中可用之前就已存在?对于仅编译器的其他对象是否存在此方法。 java.util.Map 包含一个 value() 方法,但这是有文档记录的,所以是显式的?为什么将此方法 .values 定义为隐式方法,这是 Enum 类型上的一个有用方法,因此它应该是显式的并且可用于 Enum 对象类型?
最佳答案
由于该方法仅存在于编译器中,这是否意味着它在 Enum 对象在 jdk1.5 中可用之前就已存在?
不,它是为 Java 5 添加的。
此方法是否存在于仅编译器的其他对象中。 java.util.Map 包含一个 value() 方法,但这是有文档记录的,所以是明确的?
那是不同的。 Map.values()
是一个正常的方法,Map
的一部分界面。对于任何枚举类型,values() 都是静态方法。关键区别在于静态方法不是继承的,因此添加 values()
到 java.lang.Enum 不会有帮助。另一个隐式方法是 [EnumType].valueOf(String name)
.
为什么将此方法 .values 定义为隐式,这是 Enum 类型上的一个有用方法,因此它应该是显式的?
同样,它不可能是显式的,因为静态方法不是继承的。对于 valueOf
有一个模拟valueOf(class<T> type, name)
java.lang.Enum
中的方法。我不知道为什么没有 values(class<T> type)
在那里;这对我来说是有意义的。但取而代之的是Class.getEnumConstants()
,它做同样的事情。
关于java - 什么是编译器隐式方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979011/