如何在Kotlin中将Long转换为Int?

时间:2016-03-10 10:19:25

标签: kotlin

我想做这样的事情:

fun process(minutes: Int) = 0

fun test() {
    process(System.currentTimeMillis() / 1000 / 60) // error: Int expected
}

如果我尝试process((System.currentTimeMillis() / 1000 / 60) as Int),我会在运行时获得ClassCastException

那么如何将Long转换为Int?

2 个答案:

答案 0 :(得分:43)

使用Long.toInt()

process((System.currentTimeMillis() / 1000 / 60).toInt()) 

答案 1 :(得分:1)

↓Long.toInt()不安全。因为int缩小了

val l: Long
l.toInt() ←not safety! when out of int range

请将此功能添加到任意kt文件中。 然后,将一个名为toIntOrNull的方法添加到Long中。 如果该方法不适合int范围,则尝试将long转换为int时,将返回null。

fun Long.toIntOrNull(): Int? {
    return if (this < Int.MIN_VALUE || this > Int.MAX_VALUE) {
        null
    } else {
        this.toInt()
    }
}

fun Long.toIntOrNull(): Int? {
    val i = this.toInt()
    return if (i.toLong() == this) i else null
}