Я хочу сделать расширение функции для класса внутри другого класса (для String
в ModelAndView
, а не для внутреннего), но не нашел способ сделать это без наследования классов. Это вообще возможно?
Пример расширения класса:
class MyModelAndView : ModelAndView() { infix fun String.to(value: Any?) { addObject(this, value) } }
Вы можете создавать функции расширения членов в классах, но эти расширения могут быть доступны только в классе:
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, например.