我如何知道Kotlin的推断类型?
(我使用Kotlin 1.1.2-2)
例如,如何知道表达式的推断类型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 ^
当将带有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中快速查看变量类型。