新版本的变更 / Kotlin 1.7

abstract class Task<T> {
    abstract fun execute(): T
}

class Greeting : Task<String>() {
    override fun execute() = "hello"
}

object Runner {
    inline fun <reified S : Task<T>, Trun(task: S): T = task.execute()
}

// *** before: ***
val resultOld: String = Runner.run<GreetingString>(Greeting())

// *** in version 1.7: ***
val result: String = Runner.run<Greeting_>(Greeting())   // the rest is inferred

fun main() {
    println("$resultOld $result")
}