这个@ MainActivity的代码是什么意思?

我是Kotlin的初学者,下面的代码是来自网页的,我不明白参数this@MainActivity中的代码layoutManager = LinearLayoutManager(this@MainActivity) ,你能告诉我吗? 谢谢!

 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 

引用当前的类上下文,类似于Java中的MainActivity.this

 with(list) 

改变该块中的所有内容,就好像我们在“list”是一个实例的类中一样。 你可以看到,在第一行:

 setHasFixedSize(true) 

这是一个必须在recyclerview上调用的方法,这不是MainActivity中存在的方法。 现在,LayoutManager需要一个上下文。 MainActivity是一个上下文,所以我们把MainActivity传递给它。 通常情况下,你只需要写'这个',但是因为我们现在'正在回收查看',这要归功于with语句,'this'就是'list'。 因此 – > this@MainActivity这是相同的MainActivity.this在Java条款。

这是类似的情况

 layoutManager = LinearLayoutManager(this) 

this@MainActivity是更好理解的上下文:

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

这是合格的 ,用于从外部范围访问MainActivity的上下文。

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

您可以在Kotlin 文档中阅读有关此方法的更多信息。

它被用来引用一个外部的范围。 这意味着this是来自MainActivity的范围。 你可以在这里找到更多的信息。 这个表达式

此外,它用于扩展功能。

假设你扩展了String对象。

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

this@MainActivity指向当前类实例变量。

通过使用可以获得对MainActivity的引用

 this@MainActivity