Как узнать тип вывода в Котлине?

(Я использую Kotlin 1.1.2-2)

Например, как узнать тип if (boolean_value) 1 else 2.0 inferred if (boolean_value) 1 else 2.0 ? kotlinc-jvm не показывает тип. javaClass также не помогает, потому что он показывает тип вычисленного значения, а не выражение.

 >>> (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 ^ 

при присваивании выражению if с результатом типа diff в неявную примитивную переменную ( переменную без определения типа ), тогда тип переменной есть Any / T? , или неявная переменная с их непосредственным ужином класса P например:

 // 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 

но вы можете явно определить переменную с помощью своего суперкласса, например:

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

Примечание : вы также можете использовать CTRL+SHIFT+P / CTRL+Q чтобы быстро увидеть тип переменной в IDEA.