未解析的引用:MAX_VALUE 使用 `it` 引用数字类型时

时间:2021-06-07 19:30:28

标签: kotlin numbers

Int.MAX_VALUE 按预期工作并返回 2147483647。但是当我创建数字类型列表时,使用 .forEach 迭代它们并使用 it.MAX_VALUE,我得到 error: unresolved reference: MAX_VALUE

val types = listOf(Int, Long, UInt)
types.forEach { println("${it.javaClass.simpleName} ${it.MAX_VALUE}") }

那么如何让这个表达式起作用呢? (是的,我知道我可以只查找 MIN/MAX ranges in the docs。)

我如何获得类型名称?由于 it.javaClass.simpleName 产生 IntCompanionObjectLongCompanionObjectCompanion。但是用不同类型的数字制作一个列表会产生名字:

listOf(1, 2L, 3UL).map { it.javaClass.simpleName }.toList().let { println(it) }
// [Integer, Long, ULong]

1 个答案:

答案 0 :(得分:1)

我能做的最接近的工作是将列表中的每个项目与类型显式匹配,但这违背了制作列表并对其进行迭代的目的:

val types = listOf(Int, Long, UInt)
types.forEach { 
    println(when {
        it === Int -> Int.MAX_VALUE
        it === Long -> Long.MAX_VALUE
        it === UInt -> UInt.MAX_VALUE
        else -> it
    })
}

输出:

2147483647
9223372036854775807
4294967295