Objetos acompañantes ocultar class – ¿error o característica?

En Kotlin, el siguiente parece ser un código razonable:

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

Sin embargo, no comstack: ¡tipo Foo une a Foo.Foo lugar de Foo !

¿Es eso un error (layout de lenguaje o comstackdor), o es esta una característica? Si es este último, ¿cuál es la manera idiomática de implementar combine en presencia de un object complementario?

Por supuesto, hay lo que consideraría una solución alternativa:

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

Pero eso no es muy agradable, ¿verdad?

Según la documentation , la solución es dejar de lado el nombre:

 companion object { fun someHelper() {} } 

Esto creará un object complementario sin colisionar con el nombre de class (como un object complementario llamado explícitamente Foo ). Sus methods todavía están disponibles como Foo.someHelper() , una abreviatura de Foo.Companion.someHelper() .