伴侣对象隐藏类 – 错误或功能?

在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

这是(语言设计或编译器)的错误,还是这是一个功能? 如果是后者,伴侣对象在场的情况下实现的习惯用法是什么?

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

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

但那不是太好,现在呢?

根据文件 ,解决办法是忽略名称:

 companion object { fun someHelper() {} } 

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