0
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

回答

2

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 
    } 
} 
0

除了@ 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)

相關問題