为什么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。 为什么?

Intent构造函数需要Context作为参数传递。 在makeIntent this是对伴随对象实例的引用。 随播对象不包含包含类的实例。 因此你不得不通过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)