我如何知道Kotlin的推断类型?

(我使用Kotlin 1.1.2-2)

例如,如何知道表达式的推断类型if (boolean_value) 1 else 2.0kotlinc-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 ^ 

当将带有diff类型结果的if表达式赋值给一个隐含的原始变量( 没有类型定义的变量)时,变量类型是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中快速查看变量类型。