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

标签 kotlin types type-inference diagnostics

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

更好的例子:(if (args.isEmpty()) 1 else 2.0) 应该打印 Any,因为这就是编译器认为的该术语的类型,因为它可以在编译时推断 IntDouble 最具体的父类(super class)型。

最佳答案

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

关于kotlin - 如何让编译器说出它认为表达式是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61996116/

相关文章:

java - 对类进行子类化以更改 Kotlin 中类型参数的方差

json - 使用 kotlinx.serialization 库反序列化具有不同值类型的 JSON 数组

python - Cython:访问 CPython 对象的私有(private) C 成员

rust - 为什么编译器不推断 impl 特征返回值的关联类型的具体类型?

TypeScript 无法正确推断函数的确定性返回类型

java - Spring Boot EnvironmentPostProcessor 未加载 application.properties

kotlin - 如何在Kotlin/Native中使用UnsafeMutableRawPointer?

database - 哪些数据库系统支持 ENUM 数据类型,哪些不支持?

haskell - 为什么 Maybe/Optional 类型使用 Just/Some 类型而不是实际类型?

c# - 为什么 C# "var"关键字在循环访问 Visio Masters 集合时不起作用?