¿Importar estáticamente los methods de Kotlin Companion?

tl: dr; ¿Es posible import un método dentro de un object complementario de otra class, sin calificar la import con Companion ? Es decir, ¿hay alguna forma posible de que pueda decir import Bar.toFoo lugar de import Bar.Companion.toFoo , suponiendo que el método toFoo es un método en el object complementario de Bar ?


Estamos migrando una class de Java a Kotlin. Nuestra class se ve así:

 class Bar { static Foo toFoo() { return new Foo(); } } 

Y luego, para usarlo, de una class que resulta ser Kotlin, decimos algo como:

 import Bar.toFoo; // ... Bar().convert(toFoo()); // like a Java 8 Collector // ... 

Cuando convertimos Bar a Kotlin, se ve así:

 class Bar { companion object { @JvmStatic fun toFoo() = Foo() } } 

Nos gustaría que el código de llamada funcione sin modificaciones, sin embargo

 import Bar.toFoo 

ya no funciona, ¡incluso con @JvmStatic! En cambio, tenemos que actualizarlo a

 import Bar.Companion.toFoo 

que preferimos no tener que hacer, queremos cambiar la class de Bar a Kotlin sin actualizar las personas que llaman.

¿Pensamientos? Estamos usando Kotlin 1.1.2-2.

A diferencia de Java, Kotlin no le permite llamar miembros estáticos a través de reference de instancia. Java distribuye estos miembros basándose en la statement de time de compilation, por lo tanto, en

 class Bar { static Foo toFoo() { return new Foo(); } } class Foo extends Bar { static Foo toFoo() { return new Foo(); } } class Baz { void test() { Bar fooAsBar = new Foo(); Foo foo = fooAsBar.toFoo(); } } 

En Java, fooAsBar.toFoo() llamará a Bar.toFoo() (el tipo declarado) y no a Foo.toFoo() (el tipo de time de ejecución). Esto es una fuente de malentendidos y no una buena práctica de progtwigción, por lo que Kotlin no lo admite.

Sin embargo, puede definir una function de extensión en la barra:

 fun Bar?.toFoo() = Bar.toFoo() 

Entonces puedes llamar

 val foo = fooAsBar.toFoo() 
  • ¿Cómo se comstack el proyecto Java + Kotlin con Maven?
  • error al usar 'npm start' con la aplicación creada por 'create-react-kotlin-app'
  • Delegación de propiedad horneada por map mutable
  • No se puede hacer que la API invoque urlfetch.Fetch en un hilo que no sea el hilo de request original ni un hilo creado por ThreadManager
  • Deslice el disparador OnLoadFailed () después de cargar toda la image después de desplazarse hacia abajo y desplazarse hacia arriba
  • ¿Es posible express kotlin 'con' método equivalente en Scala?
  • Kotlin Unit Test siempre pasa cuando se ejecuta desde la IU de Android Studio
  • Kotlin: eliminar nulos de una list (u otra transformación funcional)
  • Pasando lambda como argumento en Kodein
  • El punto de interrupción no recibe un golpe dentro de la callback de Kotlin en Intellij
  • Crear una class de vista / grupo de visualización personalizada en Anko DSL