伴侣对象隐藏类 – 错误或功能?
在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()
的简写。