我对以下代码行应该做什么感到困惑:
fun MyContext.req() = request as LaunchRequest
LaunchRequest
是Java类,而MyContext
是Kotlin数据类。我尝试查找使用此语法的Kotlin代码示例,但未发现任何内容。MyContext
没有req()
函数,因此这是否只是为MyContext
定义了一个新函数,该函数返回了LaunchRequest
类型的称为“request”的变量? 最佳答案
req
上定义的名为MyContext
的extension function。此技术用于在不使用继承的情况下向现有类添加新功能。可以在req
的任何对象上调用此具体示例MyContext
。如果您有
MyContext
的引用,则可以按以下方式使用它:val ctx: MyContext = ...
val req: LaunchRequest = ctx.req()
as
用于将变量request
转换为LaunchRequest
。 =
也引起混淆:它被称为表达式主体的函数,当函数包含代码中给出的single expression时,可用于替换块主体(用大括号括起来)。