有没有类似于Java或其他流行语言的扩展函数?

7

Kotlin中有一个美妙的特性,就是扩展(Extension)。我们可以将新的自定义方法添加到已实例化对象的超类中。该方法可以通过在代码中创建的对象进行访问。

我的问题基本上分为两个方面。

  1. 在Java或其他广泛使用的编程语言中是否存在这种特性的概念?

  2. 如果前一个答案是否定的,那么是否有任何变通方法可以在Java或其他语言中实现扩展?


1
不是很确定,但我认为lombok项目实现了类似的功能。 - Stultuske
3
这个功能在C#中以非常相似的形式存在。 - yole
2
我只想补充一下,这个功能在 C# 中已经存在了十年,自 2007 年引入。 - Marko Topolnik
4个回答

6

1

Swift具有非常相似的扩展功能。您可以在此处找到更多信息。

如果您查看Kotlin中的扩展函数编译结果,您会发现它们是带有接收器作为第一个参数的旧式Java静态方法,因此我想在Java中实现这个功能的最佳方法是使用静态方法。


迄今为止,我的有限探索表明Swift和Kotlin似乎非常相似! - Abhiroop Nandi Ray
不幸的是,它们确实如此,Kotlin 在 Java 的基础上非常有限。例如,Swift 在泛型方面要好得多,可以访问泛型参数的类型等。Kotlin 只有 "reified" 关键字,但它也只是一个 hack,在你深入了解之后就会发现(我并不抱怨!我很高兴我们至少有这个,再次感谢 Java)。 - Maroš Šeleng

0

许多动态语言都支持扩展方法。在大多数动态语言中,扩展方法通常被称为猴子补丁。例如,在Python中。


0

我们在C#和D语言中有扩展,并且我们在Scala中有隐式方法可以模拟这种语言特性。

在Ruby中,您甚至可以为一个对象定义方法,而不会影响任何其他相同类型的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接