另一个类中的类的函数扩展

时间:2017-12-23 21:28:24

标签: kotlin dsl

我想为另一个类内部的类创建一个函数扩展(对于String中的ModelAndView而不是内部),但是没有找到一种没有类继承的方法。有可能吗?

类扩展的示例:

class MyModelAndView : ModelAndView() {
   infix fun String.to(value: Any?) {
      addObject(this, value)
   }
}

1 个答案:

答案 0 :(得分:3)

您可以在课程中创建成员扩展功能,但这些扩展只能在课程中访问':

class X {
    fun String.ext() = println("extension on $this called")
    fun useExtension() {
        val text: String = "myText"
        text.ext()
    }
}

您只能在类中使用此扩展名,如useExtension所示,也可以在该类的上下文中使用,例如可以在with中使用:

with(x) { "abc".ext() }

不建议这样做,尽管在编写DSL时有意义。