Type conversion kotlin-数字类型的自动转换
在java中,我们可以将Type conversion kotlin-数字类型的自动转换,type-conversion,kotlin,implicit-conversion,Type Conversion,Kotlin,Implicit Conversion,在java中,我们可以将int分配给double,例如double x=123 在kotlin中,我们得到一个编译错误 问题:我们能否在kotlin中启用自动转换功能?为什么默认情况下,kotlin没有此功能 var x: Double = 123; // ERROR 还有一个例子: fun foo(x: Double) { } fun main(args: Array<String>) { foo(123.0); // OK foo(123); // ER
int
分配给double
,例如double x=123
在kotlin中,我们得到一个编译错误
问题:我们能否在kotlin
中启用自动转换功能?为什么默认情况下,kotlin
没有此功能
var x: Double = 123; // ERROR
还有一个例子:
fun foo(x: Double) { }
fun main(args: Array<String>) {
foo(123.0); // OK
foo(123); // ERROR
}
不,这不会发生的。由于
kotlin
是强类型的,这意味着类型不会被隐式强制。您需要显式类型转换。根据Kotlin的参考资料,其规定:
由于表示方式不同,较小类型不是较大类型的子类型。
[...]
因此,较小的类型不会隐式转换为较大的类型。
[...]
我们可以使用显式转换来扩大数字
科特林想知道你是有意还是无意的。如果它允许隐式转换,那么我们永远不会知道,编译器也帮不上忙。隐式转换在统计上被证明是大量的bug、神秘bug和邪恶bug。Kotlin不允许这样做,因为它希望开发人员陈述意图,而不是猜测意图。没有计划改变这一点。在Java中,您不会将
int
赋值给double
,而是先进行加宽,然后再赋值。你可以阅读关于可能发生的一切的不那么简单的解释:
fun fooShort(x: Short) {}
fun fooInt(x: Int) {}
fun fooLong(x: Long) {}
fun main(args: Array<String>) {
fooShort(123) // OK
fooInt(123) // OK
fooLong(123) // OK
}