什么是编译器隐式方法?

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()

以上是关于什么是编译器隐式方法?的主要内容,如果未能解决你的问题,请参考以下文章

隐式方法参数解析? Scala编译器?

如何强制编译器显示隐式构造函数

Scala隐式转换

scala中隐式转换之总结

显式声明和隐式声明都是啥时候用?该用哪一个?

匿名方法