Назад к вопросам
Junior
100
questionbank

Что такое модификатор доступа 'internal' в Kotlin и как его использовать?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Модификатор доступа internal в Kotlin означает, что объявление видимо внутри того же модуля. Модулем может быть набор Kotlin-файлов, скомпилированных вместе, например:

  • Модуль Gradle (исходный набор).
  • Модуль Maven.
  • Исходный набор Ant.

Это полезно для сокрытия деталей реализации внутри модуля, делая их недоступными для кода из других модулей.

Использовать internal можно с:

  • Классами
  • Интерфейсами
  • Объектами (object)
  • Функциями
  • Свойствами
  • Конструкторами

Пример использования:

// Модуль "module1"
package com.example.module1

internal class InternalClass {
    internal fun internalFunction() {
        // Этот код виден только внутри module1
    }
}

// Этот объект также виден только внутри module1
internal object InternalObject {
    internal val internalProperty = "Internal value"
}
// Модуль "module1"
package com.example.module1

fun someFunctionInModule1() {
    val internalCls = InternalClass() // Доступно
    internalCls.internalFunction()     // Доступно
    println(InternalObject.internalProperty) // Доступно
}
// Модуль "module2"
package com.example.module2

import com.example.module1.InternalClass // Ошибка компиляции
import com.example.module1.InternalObject // Ошибка компиляции

fun someFunctionInModule2() {
    // Нельзя создать экземпляр InternalClass или обратиться к InternalObject
    // val internalCls = InternalClass() // Недоступно
    // println(InternalObject.internalProperty) // Недоступно
}

Главное отличие от public (видимо везде) и private (видимо только внутри класса) и protected (видимо внутри класса и его подклассов) заключается именно в уровне видимости по модулям.