Sobes.tech
Junior

O que é o modificador de acesso 'internal' em Kotlin e como usá-lo?

sobes.tech IA

Resposta da IA

O modificador de acesso internal em Kotlin significa que a declaração é visível dentro do mesmo módulo. Um módulo pode ser um conjunto de ficheiros Kotlin compilados juntos, por exemplo:

  • Um módulo Gradle (conjunto de código fonte).
  • Um módulo Maven.
  • Um conjunto de código Ant.

Isto é útil para esconder detalhes de implementação dentro do módulo, tornando-os inacessíveis ao código de outros módulos.

Pode usar internal com:

  • Classes
  • Interfaces
  • Objetos (object)
  • Funções
  • Propriedades
  • Construtores

Exemplo de uso:

// Módulo "module1"
package com.example.module1

internal class InternalClass {
    internal fun internalFunction() {
        // Este código é visível apenas dentro de module1
    }
}

// Este objeto também é visível apenas dentro de module1
internal object InternalObject {
    internal val internalProperty = "Valor interno"
}
// Módulo "module1"
package com.example.module1

fun someFunctionInModule1() {
    val internalCls = InternalClass() // Disponível
    internalCls.internalFunction()     // Disponível
    println(InternalObject.internalProperty) // Disponível
}
// Módulo "module2"
package com.example.module2

import com.example.module1.InternalClass // Erro de compilação
import com.example.module1.InternalObject // Erro de compilação

fun someFunctionInModule2() {
    // Não é possível criar uma instância de InternalClass ou aceder a InternalObject
    // val internalCls = InternalClass() // Não disponível
    // println(InternalObject.internalProperty) // Não disponível
}

A principal diferença em relação a public (visível em todo o lado), private (apenas dentro da classe) e protected (dentro da classe e das suas subclasses) reside no nível de visibilidade por módulos.