0

在 Kotlin 中,以下似乎是合理的代码:

data class Foo(val bar: String) {
    fun combine(other: Foo): Foo {
        return Foo(bar + other.bar)
    }

    companion object Foo {
        fun someHelper() {}
    }
}

但是,它不会编译:类型Foo绑定到Foo.Foo而不是Foo

这是一个(语言设计或编译器)错误,还是一个特性?combine如果是后者,在存在伴随对象的情况下实现的惯用方式是什么?

当然,我会考虑一种解决方法:

fun combine(other: my.package.Foo): my.package.Foo {
    return Foo(bar + other.bar)
}

但这不太好,现在是吗?

4

1 回答 1

2

根据文档,解决方案是省略名称:

companion object {
    fun someHelper() {}
}

这将创建一个伴生对象,而不会与类名冲突(就像显式命名的伴生对象Foo一样)。它的方法仍然可以作为Foo.someHelper(). 的简写Foo.Companion.someHelper()

于 2017-03-26T15:51:04.323 回答