【发布时间】:2014-03-12 16:29:32
【问题描述】:
Java 语言设计者决定使用虚拟扩展方法而不是像 C# 这样的静态扩展方法。静态扩展方法可能会导致与未来方法的命名冲突,但接口可以保持不变。
那么在 Java 中使用虚拟扩展方法的原因是什么?
【问题讨论】:
-
我相信它们的用途完全不同,并且仅按名称相关,所以这个问题没有任何意义。
-
@AntP 在 C# 中引入了静态扩展方法,以解决与 Java 中的虚拟扩展方法相同的问题。
-
你有这方面的参考吗?因为根据我正在阅读的有关 Java 中的虚拟扩展方法的内容,很明显它们肯定不是。完全没有。甚至远程也不行。虚拟扩展方法为接口实现者提供方法的默认实现,以防御未来版本的语言(或其他 API,我猜),这与 C# 扩展方法的作用无关。
-
“静态扩展方法可能导致与未来方法的命名冲突” - 你能澄清一下吗?请注意,在名称解析期间类方法优先于扩展,因此类稍后可以决定自己实现一些扩展方法(即,这是对某些类型进行 LINQ 优化的方式 - 类可以实现
Where以“覆盖”Enumerable.Where扩展方法)
标签: c# java extension-methods java-8