Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

122
Visualizações
Acceso al alcance externo con esto calificado en funciones de extensión para clases internas

¿Cómo puedo acceder al alcance externo desde una clase interna cuando creo una función de extensión para ella?

Ejemplo

 class A { inner class B { fun own() = this@A } }

Este código se compila y ejecuta como se supone que debe hacerlo.

Cuando agrego la siguiente función de extensión

 fun ABext() = this@A

La compilación falla con

 Error:(7, 22) Kotlin: Unresolved reference: @A

Leí la documentación para calificar esto y menciona brevemente las funciones de extensión, pero sin ningún ejemplo.

¿Es posible acceder al alcance externo desde las funciones de extensión?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Una función de extensión solo puede hacer cosas que no puede hacer una fun ext(x: AB) sin extensión, por lo que esperaría que no, al igual que no puede acceder a ella en Java . Esto se debe a que se compila en una función de este tipo, la sintaxis solo hace que parezca un miembro.

Si bien la clase B tiene un campo que contiene una referencia a la instancia externa A , no se puede acceder a este campo directamente desde el código por nombre. Permitir el acceso violaría la encapsulación .

La página vinculada habla de "acceder [ing] this desde un ámbito externo". "Alcance" aquí se usa en el sentido de https://en.wikipedia.org/wiki/Scope_(computer_science) , por lo que en el ejemplo tiene ámbitos donde los comentarios dicen "etiqueta implícita"

 class A { // outer scope 1 inner class B { // outer scope 2 fun Int.foo() { // function scope } } }

mientras

 fun ABext() = ...

no tiene ningún ámbito externo (excepto el ámbito del archivo, que no tiene this ). A menos que sea realmente

 class C { fun ABext() = // can use this@C }

pero no puede escribir this@A o this@B porque la función no está definida en el alcance de la class A o class B

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda