Android 为什么使用this@MainActivity在这个代码中?

Android 为什么使用this@MainActivity在这个代码中?,android,kotlin,label,this,Android,Kotlin,Label,This,我在MainActivity类中看到这样的代码: class MainActivity : AppCompatActivity() { private val languages = arrayOf("One","Two","Three","Four","Five","Six","Seven","Eight","Nine

我在MainActivity类中看到这样的代码:

class MainActivity : AppCompatActivity() {
    private val languages = arrayOf("One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten")
    private var index = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        textSwitcher.setFactory {

            val textView = TextView(this@MainActivity) //the line I was 
                                                       //talking about.

            textView.gravity =  Gravity.CENTER_HORIZONTAL
            textView.textSize = 32f
            textView.setTextColor(Color.BLACK)
        }
        textSwitcher.setText(languages[index])
    }
}
但是我没有明白。“”关键字已不代表主要活动?如果是,为什么需要标签

我编写了理解“this”关键字的代码


如果该代码行位于
apply
lambda内部或某个对象内部,或在其他情况下;lambda将具有自身的引用,可以使用相同的关键字
this
访问它。因此,指定范围名称作为标签的适当引用@


所以基本上,标签用于指定其他lambda或内部类等内部外部类的范围,

与您相关的行位于lambda表达式中,Kotlin正在将其转换为一个
ViewSwitcher.ViewFactory
。因此,在lambda表达式的范围内,
这个
ViewSwitcher.ViewFactory
,而不是
main活动
。因此,我们需要
@MainActivity
标签来指示我们需要外部
MainActivity
对象对
的表示


“此”关键字已不代表主要活动?”--不一定。这将取决于那条线在哪里。然而,考虑到这一行代码,很难进一步帮助您。您可能会考虑编辑您的问题,以便您的整个代码<>主活动< /代码>,包括涉及您的线路。谢谢。事实上,我曾试图将代码缩减到最低级别,但我进行了编辑。我不知道为什么我不理解。但我认为是这样的。setFactory是一个高阶函数。如果我写“this”,它会检测HOF中的一个值作为参考。对吗?对不起,我的英语不好。@Furkan:“setFactory是一个高阶函数”——不太好。它是一个将Java接口对象作为参数的函数。这里的代码使用Kotlin SAM(单一抽象方法)支持将lambda表达式转换为该Java接口的实例。“它检测HOF中的一个值作为引用”--抱歉,但我不知道HOF在本文中的含义。这也是一个令人困惑的问题。你怎么发现setFactory是SAM的?它不会在Android引用中写入任何内容(如SAM或更高阶函数)。我知道的SAM是Java接口。当我进入时,我看到一个公共类(据我所知,SAM不能来自该类)。我没有看到接口。当我看有一个界面,是的。但是没有设置工厂的方法。所以如果它是“setFactory”,我会说它是SAM。你怎么能说“它是SAM”?我希望我能告诉你。我把HOF缩短为高阶函数。@Furkan:“你是如何发现setFactory是SAM的?”--
setFactory()
是一种方法。它将
ViewSwitcher.ViewFactory
作为参数。因此,Kotlin SAM支持可用于创建
ViewSwitcher.ViewFactory
实例。
class class1(c:class2){
    init{
        c.output()
    }
}
class class2{
    init{
        class1(this) // this" keyword represent the class2
    }
    fun output(){
        println("Hello.")
    }
}
fun main(){
    val x = class2()
}