Kotlin: модификатор видимости меняет тип анонимного объекта
Удаление private
модификатор myScope
(строка 4) в следующем рабочем коде нарушит код. Причиной этого является изменение типа myScope
, Установлена ли видимость на private
тип: anonymous object : Scope
, Без private
тип переключен на Scope
, Как я могу исправить это поведение?
interface Scope
operator fun<SD: Scope> SD.invoke(block: SD.() -> Unit) = block()
private val myScope = object : Scope {
fun Int.myScopedExtFunction() = 1337
}
fun usage() {
myScope {
1.myScopedExtFunction()
}
}
1 ответ
Такое поведение является особенностью. Смотрите документацию:
Обратите внимание, что анонимные объекты могут использоваться как типы только в локальных и частных объявлениях. Если вы используете анонимный объект в качестве возвращаемого типа публичной функции или типа открытого свойства, фактическим типом этой функции или свойства будет объявленный супертип анонимного объекта или Any, если вы не объявили какой-либо супертип, Члены, добавленные в анонимный объект, не будут доступны.