¿Cómo sé el tipo inferido en Kotlin?

(Yo uso Kotlin 1.1.2-2)

Por ejemplo, ¿cómo sé el tipo inferido de expresión if (boolean_value) 1 else 2.0 ? kotlinc-jvm no muestra el tipo. javaClass tampoco ayuda porque muestra el tipo de valor calculado no expresión.

 >>> (if (true) 1 else 2.0).javaClass.name java.lang.Integer >>> (if (false) 1 else 2.0).javaClass.name java.lang.Double >>> val v: Double = if (false) 1 else 2.0 error: the integer literal does not conform to the expected type Double val v: Double = if (false) 1 else 2.0 ^ 

cuando se asigna la expresión if con el resultado de tipo diff a una variable primitiva implícita ( variable sin definición de tipo ), entonces el tipo de variable es Any / T? , o una variable implícita con su class de cena directa P por ejemplo:

 // case 1 val v = if (false) 1 else 2.0 // ^--- Any v.toInt(); // error because v is Any // case 2 val v = if (false) 1 else null // ^--- Int? // case 3 val e = if (true) java.sql.Time(1) else java.sql.Timestamp(1); // ^--- its type is java.util.Date 

pero puede definir la variable explícitamente con su superclass, por ejemplo:

 // case 1 val v:Number = if (false) 1 else 2.0; v.toInt();//ok // case 2 val v:Int? = if (false) 1 else null; 

Nota : también puede usar CTRL+SHIFT+P / CTRL+Q para ver el tipo de variable rápidamente en IDEA.