Kotlin – MainActivity扩展AppCompatActivity,onRequestPermissionsResult函数未找到,不能被覆盖

我有一个扩展AppCompatActivity的试用活动类主活动。 在文档中,AppCompatActivity继承了onRequestPermissionsResult方法,当我尝试重写onRequestPermissionsResult方法时,出现此错误

“错误:(95,5)'onRequestPermissionsResult'不会覆盖任何内容”

class MainActivity : AppCompatActivity(), ConnectionCallbacks, OnConnectionFailedListener{ //I didnt include the other functions in the interfaces, suffice to say i have already added them in the original override fun onRequestPermissionsResult(requestCode : Int , permissions: Array<String>, grantResults: Array<Int>){ println("SHOULD HAVE THIS FUNCTION") } } 

Kotlin Array<Int>映射到Java Integer[]IntArray映射到Java int[] ,它们是Java中不同的数组类型。 您可以进一步在Kotlin中查看映射类型 。

AppCompatActivity#onRequestPermissionsResult方法签名是:

 override fun onRequestPermissionsResult(requestCode : Int , permissions: Array<String>, grantResults: IntArray){ // it is IntArray rather than Array<Int> ---^ TODO() } 

而不是:

 override fun onRequestPermissionsResult(requestCode : Int , permissions: Array<String>, grantResults: Array<Int>){ TODO() } 

注意 :如果api已经承诺它的参数永远不会是null ,比如onRequestPermissionsResult,那么你可以使用一个IntArray来使参数易于使用。 否则,你应该使用IntArray? 代替。

如果你不想知道Kotlin中的所有映射类型 ,还有另外一种方法可以让你快速重写超类方法。 首先,将光标放在类中,然后按CTRL+O选择要覆盖的方法。 例如:

 class MainActivity : AppCompatActivity(), ConnectionCallbacks, OnConnectionFailedListener{ // put the cursor here, press `CTRL+O` to select which method you want to override }