伴随对象隐藏 class -- 错误或功能?

Companion objects hide class -- bug or feature?

在 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)
}

但这不太好,是吗?

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

companion object {
    fun someHelper() {}
}

这将创建一个伴生对象,而不会与 class 名称冲突(正如明确命名的伴生对象 Foo 所做的那样)。它的方法仍然可用 Foo.someHelper(),shorthand for Foo.Companion.someHelper().