kotlin - 数字类型的自动转换

时间:2017-05-23 02:28:44

标签: 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);    // ERROR
}

更新

文字123可以在编译时自动转换为ShortLong。但它不会转换为FloatDouble

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
}

1 个答案:

答案 0 :(得分:4)

没有。这不会发生。由于 date date_value 0 2016-06-01 07:00:00 green 1 2016-06-02 07:00:00 green 2 2016-06-03 07:00:00 green 3 2016-06-04 07:00:00 green 是强类型的,因此类型不会被隐式强制。您需要显式类型转换。从Explicit Conversions的Kotlin参考文献中可以看出:

  

由于表示不同,较小的类型不是较大类型的子类型。   [...]   因此,较小的类型不会隐式转换为更大的类型。   [...]   我们可以使用显式转换来扩大数字。