作者:mobiledu2502875123 | 来源:互联网 | 2023-01-31 13:22
(我用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
^
holi-java..
5
当将带有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中快速查看变量类型。
1> holi-java..:
当将带有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中快速查看变量类型。
昨天发布的新Kotlin v1.1.3在IDEA中引入了类型提示。参见https://blog.jetbrains.com/kotlin/2017/06/kotlin-1-1-3-is-out/#more-5080