Это называется Локальные классы . Они упоминаются в документации , но только потому, что они не могут иметь модификаторы видимости.
- Вы не можете получить доступ к локальному классу нигде, кроме функции, в которой он был объявлен.
- Он может получить доступ к любым членам, в том числе закрытым, класса, в котором они содержатся.
- Он может обращаться к любым локальным переменным или параметрам метода, которые входят в область объявления функции
Вы можете взглянуть на локальные классы Java для получения дополнительной информации. Это должно быть в основном то же самое.
Типичный вариант использования - реализация одноразового интерфейса.
fun main() {
val f1 = f1()
println(f1.x)
println(f1.y)
}
interface Data {
val x : Int
val y : Int
}
fun f1(): Data {
data class SpecificData(override val x: Int, override val y: Int) : Data
return SpecificData(5, 10)
}