如何让编译器说出它认为表达式是什么类型?
How to get the compiler to say what type it thinks an expression is?
有没有办法让 Kotlin 编译器准确地告诉我它认为表达式是什么类型?所以例如给定 (1 + 2)
它将打印 Int
.
更好的例子:(if (args.isEmpty()) 1 else 2.0)
应该打印 Any,因为编译器认为这是该术语的类型,因为它在编译时能做的最好的事情是推断出 [=11= 的最具体的超类型] 和 Double
.
fun main() {
println(typeName { if (true) 1 else 2.5 }) // Any
println(typeName { 1 + 2 }) // Int
println(typeName { f() }) // String
}
fun f(): String = TODO() // throws NotImplementedError
inline fun <reified T> typeName(block: () -> T): String? = T::class.simpleName
如果您在编辑代码时需要此功能,基于 IntelliJ 的 IDE 支持此功能。该操作称为 Type Info,您可以使用 Ctrl + Shift + P (⌃⇧P 在 macOS 上)默认。
有没有办法让 Kotlin 编译器准确地告诉我它认为表达式是什么类型?所以例如给定 (1 + 2)
它将打印 Int
.
更好的例子:(if (args.isEmpty()) 1 else 2.0)
应该打印 Any,因为编译器认为这是该术语的类型,因为它在编译时能做的最好的事情是推断出 [=11= 的最具体的超类型] 和 Double
.
fun main() {
println(typeName { if (true) 1 else 2.5 }) // Any
println(typeName { 1 + 2 }) // Int
println(typeName { f() }) // String
}
fun f(): String = TODO() // throws NotImplementedError
inline fun <reified T> typeName(block: () -> T): String? = T::class.simpleName
如果您在编辑代码时需要此功能,基于 IntelliJ 的 IDE 支持此功能。该操作称为 Type Info,您可以使用 Ctrl + Shift + P (⌃⇧P 在 macOS 上)默认。