什么是编译器隐式方法?
Posted
技术标签:
【中文标题】什么是编译器隐式方法?【英文标题】:What is a compiler implicit method? 【发布时间】:2013-11-27 13:02:44 【问题描述】:对此问题的评论:A 'for' loop to iterate over an enum in Java 状态:
@jacktrades:这是一个隐式方法,只存在于 编译器。因此基类不能用 同名,因此它不会自动包含在 生成的 Javadocs。 docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2 – 托本 3 月 5 日 9:32
既然这个方法只存在于编译器中,这是否意味着它在 Enum 对象在 jdk1.5 中可用之前就存在了?此方法是否存在于仅编译器的其他对象。 java.util.Map 包含一个 values() 方法,但这是记录在案的,所以是明确的?为什么将这个方法 .values 定义为隐式,这是一个对 Enum 类型有用的方法,所以它应该是显式的并且在 Enum 对象类型上可用?
【问题讨论】:
【参考方案1】:由于这个方法只存在于编译器中,这是否意味着它在 Enum 对象在 jdk1.5 中可用之前就存在了?
不,它是为 Java 5 添加的。
此方法是否存在于仅编译器的其他对象。 java.util.Map 包含一个 values() 方法,但这是记录在案的,所以是明确的?
那不一样。 Map.values()
是一个普通方法,是Map
接口的一部分。对于任何枚举类型,values() 都是静态方法。主要区别在于静态方法不是继承的,因此将values()
添加到 java.lang.Enum 不会有帮助。另一个隐式方法是[EnumType].valueOf(String name)
。
为什么要将此方法 .values 定义为隐式,这是对 Enum 类型有用的方法,所以它应该是显式的?
同样,它不可能是显式的,因为静态方法不是继承的。对于valueOf
,在java.lang.Enum
中有一个模拟valueOf(class<T> type, name)
方法。我不确定为什么那里没有values(class<T> type)
;这对我来说很有意义。但取而代之的是Class.getEnumConstants()
,它做同样的事情。
【讨论】:
有一个Class.getEnumConstants()
。以上是关于什么是编译器隐式方法?的主要内容,如果未能解决你的问题,请参考以下文章