如何让编译器说出它认为表达式是什么类型?

时间:2020-05-25 05:05:00

标签: kotlin types type-inference diagnostics

有没有办法让Kotlin编译器准确地告诉我它认为表达式是什么类型?所以给定(1 + 2),它将打印Int

更好的示例:(if (args.isEmpty()) 1 else 2.0)应该打印Any,因为这是编译器认为的那个术语的类型,因为在编译时它能做的最好的就是推断Int的最具体的超类型,并且Double

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果在编辑代码时需要此功能,则基于IntelliJ的IDE支持此功能。该操作称为类型信息,默认情况下,您可以通过 Ctrl + Shift + P (在macOS上为 ⌃⇧P )进行访问。 / p>

Example of using Type Info

相关问题