代码之家  ›  专栏  ›  技术社区  ›  Давид Бестаев

其他类中类的函数扩展

  •  2
  • Давид Бестаев  · 技术社区  · 7 年前

    我想为另一个类中的类进行函数扩展(用于 String 在里面 ModelAndView ,不适用于内部),但没有找到在没有类继承的情况下执行此操作的方法。有可能吗?

    类扩展示例:

    class MyModelAndView : ModelAndView() {
       infix fun String.to(value: Any?) {
          addObject(this, value)
       }
    }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   s1m0nw1    7 年前

    您可以在类中创建成员扩展函数,但这些扩展只能在类“”中访问:

    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时这样做是有意义的。