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
产生 IntCompanionObject
、LongCompanionObject
、Companion
。但是用不同类型的数字制作一个列表会产生名字:
listOf(1, 2L, 3UL).map { it.javaClass.simpleName }.toList().let { println(it) }
// [Integer, Long, ULong]
答案 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