为什么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作为参数传递。内部makeIntentthis是对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)