【问题标题】:How can I write extension methods for Array's Companion objects in Kotlin?如何在 Kotlin 中为 Array 的 Companion 对象编写扩展方法?
【发布时间】:2018-08-19 14:41:53
【问题描述】:

我们知道(在this question 中提到过,无数人写过相同的答案),我们可以为伴生对象提供扩展方法,以使某些东西看起来像“静态扩展”。

但是当我在kotlin.Array 上尝试这个时,我失败了:

operator fun <T> Array<T>.Companion.invoke() {
}

上面的代码导致这个错误:

那么Arrays 有伴生对象吗?如果不是,如何为Arrays 制作“静态扩展”?

编辑:

inline operator fun <reified T> Array<T>.Companion.invoke() {
}

这段代码也失败了。

【问题讨论】:

  • 我觉得还是不可能做到的,如你所见in the comments
  • 另外,如果它确实有效,那就是Array.Companion.invoke();伴随对象不依赖于泛型参数。

标签: kotlin


【解决方案1】:

您目前无法在 Kotlin 中执行此操作。这里添加这个的核心问题是kotlin.Array目前没有伴生对象,你不能在不存在的伴生对象上添加扩展。

根据this thread的说法,没有办法给不存在的伴生对象添加扩展函数,但是人们要求它。

我能在该帖子中找到的最佳答案来自@yole:

此功能不在 Kotlin 1.2 的路线图中;我们还没有为后续版本做任何规划。

编辑:我找到了KT-11968,它似乎涵盖了这个案例,并且引起了其他人的一些兴趣。也许游说将其包含在将来的版本中?请注意,我发现了其他几个似乎符合此描述的问题,但都标记为 KT-11968 的重复项,所以我认为这是要赞成/游说的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多