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()
    }
}

Вот обе версии в Android Studio:

1 ответ

Решение

Такое поведение является особенностью. Смотрите документацию:

Обратите внимание, что анонимные объекты могут использоваться как типы только в локальных и частных объявлениях. Если вы используете анонимный объект в качестве возвращаемого типа публичной функции или типа открытого свойства, фактическим типом этой функции или свойства будет объявленный супертип анонимного объекта или Any, если вы не объявили какой-либо супертип, Члены, добавленные в анонимный объект, не будут доступны.

Другие вопросы по тегам