【发布时间】:2015-03-28 09:52:47
【问题描述】:
如何在 Kotlin 中定义静态扩展方法?这甚至可能吗?我目前有一个扩展方法如下图。
public fun Uber.doMagic(context: Context) {
// ...
}
可以在实例上调用上述扩展。
uberInstance.doMagic(context) // Instance method
但是我如何使它成为如下所示的静态方法。
Uber.doMagic(context) // Static or class method
【问题讨论】:
-
“静态扩展方法”是什么意思?
-
我可以在没有实例的情况下调用的方法,但仍然是类的扩展。 (常规 Java 静态方法)
-
我认为这可能不是 Kotlin extensions 好问题的预期用途,我在尝试推断 C# 概念时想到了同样的事情。但是在实践中,用法非常相似。 Kotlin 扩展,虽然它们声称是静态调度的,但它们感觉就像是动态“附加”的,如果有这样的事情,或者迟到绑定到实例。如果我没记错的话......或者我完全错了:)
-
目前你不能编写一个扩展方法来调用一个类名而不是类实例。事实上,扩展函数需要一个 receiver parameter 是一个实例,所以没有办法跳过这部分。另一方面,我们正在研究一种为类对象编写扩展的方法,这样您就可以在类名上调用它,但接收者具有类对象的类型
-
@AndreyBreslav 您能否更新我们是否允许静态扩展功能?我也想念它。
标签: static-methods kotlin