为什么Intent构造函数在伴随对象中不可见? Kotlin
问题描述:
class MainActivity : AppCompatActivity() {
companion object {
fun makeIntent(pos : Int) {
println("${pos} is here!")
var intent = Intent(this, DetailActivity::class.java)
if (intent != null) {
println("intent is not null in makeIntent function")
} else {
println("intent is null in makeIntent function")
}
}
}
...
}
虽然在做var intent = Intent(...)
它没有看到意图。为什么?为什么Intent构造函数在伴随对象中不可见? Kotlin
答
Intent
构造函数要求Context
作为参数传递。内部makeIntent
this
是对companion object的实例的参考。伴随对象不包含包含类的实例。因此,你必须通过Context
莫名其妙如:
class MainActivity : AppCompatActivity() {
companion object {
fun makeIntent(pos : Int, context:Context):Intent {
println("${pos} is here!")
var intent = Intent(context, DetailActivity::class.java)
return intent
}
}
答
除了@ meinsol的出色答卷,你可以保持你的代码几乎是相同的,如果你添加一个接收到makeIntent
功能:
class MainActivity : AppCompatActivity() {
companion object {
fun Context.makeIntent(pos : Int) { // <- Notice the Context receiver here
println("${pos} is here!")
var intent = Intent(this, DetailActivity::class.java)
// Do what you want with the intent
}
}
...
}
然后你可以从任何地方调用它,你是在一个范围内(makeIntent(5)
),或者如果您在上下文不是,但有一个可用的,使用它(context.makeIntent(5)
)