【发布时间】:2020-05-12 16:28:36
【问题描述】:
几种语言都有扩展方法,例如 C#、Ruby、Smalltalk、Kotlin、Scala。这个想法是,您可以将方法添加到对扩展关闭的类中,例如系统类(如 String、Integer)或最终类(如 ArrayList)。
因此,您只需添加相应的扩展方法,而不是拥有所有这些 Util 类。因此,您可以调用“foo”.split(),而不是 StringUtils.split(...)。
Java 没有扩展方法。我的问题是是否可以在不破坏二进制向后兼容性的情况下将扩展方法添加到 Java 中,例如过去使用 Java8 lambda 或其他功能。问题仅在于是否可以在不制动向后兼容性的情况下完成。
在 C# 和 Kotlin 中,扩展方法被实现为静态方法。因此,与 Java 相同,StringUtils.split(...) 会有一些额外的语法,它会告诉 Java 编译器在编译时“foo”.split() 必须替换为 StringUtils.split( ...)。至少,我认为 C# 和 Kotlin 中会发生这种情况。
再次,我的问题只是关于 Java 中的扩展方法是否可以在不影响向后兼容性的情况下完成。就是这样。
【问题讨论】:
标签: java extension-methods backwards-compatibility