¿Qué significa el código this @ MainActivity?

Soy un principiante de Kotlin, el siguiente código es de una página web, no puedo entender que el parámetro this@MainActivity en el código layoutManager = LinearLayoutManager(this@MainActivity) , ¿podría decirme? ¡Gracias!

 import android.os.Bundle import android.support.v7.widget.LinearLayoutManager import android.view.Menu import android.view.MenuItem import kotlinx.android.synthetic.main.activity_main.* import mobi.porquenao.poc.kotlin.R class MainActivity : BaseActivity() { lateinit var listAdapter: MainAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) with (list) { setHasFixedSize(true) layoutManager = LinearLayoutManager(this@MainActivity) listAdapter = MainAdapter() adapter = listAdapter } } override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main, menu) return super.onCreateOptionsMenu(menu) } override fun onOptionsItemSelected(item: MenuItem?): Boolean { listAdapter.add() list.smoothScrollToPosition(0) return true } } 

 this@MainActivity 

se refiere al context de class actual, similar a MainActivity.this en Java

 with(list) 

cambia todo en ese bloque como si estuviéramos en la class de la cual 'list' es una instancia. Puedes ver eso en la primera línea:

 setHasFixedSize(true) 

Este es un método que debe invocarse en una vista de reciclador, este no es un método que existe en MainActivity. Ahora, el LayoutManager espera un context. MainActivity es un context, por lo que le pasamos MainActivity. Normalmente, simplemente escribiría 'esto', pero como ahora estamos 'en la vista recicladora' gracias a la statement con, 'esto' significaría 'list'. Por lo tanto -> this@MainActivity que es lo mismo que MainActivity.this en términos de Java.

Ese es el context similar a

 layoutManager = LinearLayoutManager(this) 

this@MainActivity es el context para comprender mejor:

 Kotlin: Java: this@MainActivity == MainActivity.this 

Es un producto calificado , utilizado para acceder al context de MainActivity desde un ámbito externo.

 class MainActivity { fun onCreate() { val list = listOf(1, 2, 3) with (list) { println(this) // >>> [1, 2, 3] println(this@MainActivity) // >>> MainActivity@2a84aee7 } } } 

Puede leer más acerca de este enfoque en la documentation de Kotlin.

Se usa para hacer reference a un scope externo. esto significa que this es del scope MainActivity . Puede encontrar más información sobre eso aquí. esta expresiones

Además, se usa en funciones de extensión.

Supongamos que extiendes el object String.

 fun String.Capitalize(){ //some logic here this.@Capitalize // this references the receiver of Capitalize ie any string } 

this@MainActivity señala la variable de instancia de la class actual.

Puede get una reference a su MainActivity mediante el uso de

 this@MainActivity 
  • Especificación Jpa para encontrar un subset del valor del campo
  • replicar la function de hash de javascript a java / kotlin
  • Cómo ejecutar spark java con Kotlin desde la línea de command
  • Android - ShanetworkingPreferences - Context
  • Cancelar la tarea reemplazada en ThreadPool en Java / Kotlin
  • Adaptación con los rasgos de Kotlin que incluyen methods implementados
  • ¿Cómo guardo un logging en Apache Jena?
  • Tipos de matriz de Kotlin y literales de class
  • ¿Qué es un MapRowParser simple en Anko?
  • Kotlin coroutines en Android: ¿Por qué usar bg () de Anko en lugar de async ()?
  • No se pudo get la propiedad desconocida 'anko_version' para el object de tipo ...?