kotlin – conversión automática de types numéricos

En java , podemos asignar int a double , por ejemplo double x = 123 ;

En kotlin , tenemos un error comstackdo.

Pregunta: ¿Podemos habilitar la function de conversión automática en kotlin ? ¿Por qué kotlin no tiene esta característica por defecto?

 var x: Double = 123; // ERROR 

Un ejemplo más:

 fun foo(x: Double) { } fun main(args: Array<String>) { foo(123.0); // OK foo(123); // ERROR } 

ACTUALIZAR:

el literal 123 se puede convertir automáticamente a Short o Long en time de compilation. Pero no se convertirá en Float o Double .

 fun fooShort(x: Short) {} fun fooInt(x: Int) {} fun fooLong(x: Long) {} fun main(args: Array<String>) { fooShort(123) // OK fooInt(123) // OK fooLong(123) // OK } 

No. Esto no va a suceder. Como kotlin está fuertemente tipado, los types de significado no son coaccionados implícitamente . Necesita una conversión de tipo explícita. De la reference de Kotlin para conversiones explícitas se afirma:

Debido a las diferentes representaciones, los types más pequeños no son subtypes de los más grandes. […] Como consecuencia, los types más pequeños NO se convierten implícitamente a types más grandes. […] Podemos usar conversiones explícitas para ampliar numbers.