【发布时间】:2016-07-01 14:54:15
【问题描述】:
例如我有 Java 类(来自外部库):
class A {} // This is Java class
我想添加在 Kotlin 上编写的扩展函数,并将其命名为:
A.foo() // This is call of extension function `foo` from Kotlin code
据我了解,目前在 Kotlin 中是不可能的,因为它仅支持 KClass-es with companion object 的“静态”扩展功能。对吧?
似乎没有什么可以阻止以后在 Kotlin 中实现这样的功能。对吧?
2019-06-12 更新:这个question 没有回答我的问题,因为我的问题是关于 Kotlin 扩展函数与 Java 类的兼容性。
【问题讨论】:
-
为什么需要这个?您可以在包中定义一个常规函数以获得相同的效果,除非您不必使用带点语法的类名来调用它。如果您希望使用反射来查找某个类中的静态方法,那就另当别论了……
-
我只想使用
A.foo()语法而不是foo(A),因为Kotlin 提倡使用这种语法来扩展类的功能(参见第一段here)。 -
对,扩展函数和属性是针对类的instances的。你这里没有实例,只是一个函数调用。
-
但是,如果你想用
foo(A)替换A.foo(),这意味着在foo(A)的情况下你需要一个A的实例,对吧?如果是这样,为什么不对实例使用扩展功能并做a.foo()? -
我是说您根本没有在 A 类中定义函数。您只需在某个包中定义它,将其导入您想要使用它的代码中,然后在没有任何封闭类引用的情况下调用它。静态方法在其声明的参数之外根本不需要任何实例,对于包中定义的 kotlin 函数也是如此。
标签: kotlin