当使用 Child Class 寻址时,Kotlin 中针对在 Base Class 中定义的接口的未解析引用
Unresolved Reference in Kotlin for an Interface defined in Base Class when addressed using Child Class
您好,我正在尝试使用继承 AudioBase.java 的 AudioChild.java 来解决在我的 AudioBase.java 中定义的接口“CallbackTest”。但是在尝试这样做时它给出了 Unresolved reference 的编译错误。
这是我的 class 定义:
AudioBase.java
package com.testapp.kotlinexample.classes;
public class AudioBase {
public interface CallbackTest {
void onCall(int var1);
}
}
Child Class AudioChild.java
package com.testapp.kotlinexample.classes;
import android.util.Log;
public class AudioChild extends AudioBase{
private static final String TAG = "AudioChild";
public void someOtherMethod() {
Log.i(TAG, "in someOtherMethod()");
}
}
MainActivity.kt
import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.testapp.kotlinexample.classes.AudioChild
class MainActivity : AppCompatActivity() {
private val TAG = "TestApp"
private var mContext: Context? = null
private val stateCallback =
AudioChild.CallbackTest { // Compilation error on this line
Log.i(TAG, "onCall:() called")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mContext = applicationContext
}
}
当我使用 AudioChild.CallbackTest 时出现以下编译错误:
未解决的参考:CallbackTest
谁能帮我理解为什么会出现这个错误?
我不是科特林专家,但我知道 java 并用谷歌搜索了一下:
静态方法(看起来 class/interface 定义)不被继承。
基本上只有实例(non-static)成员被继承。静态引用的所有内容 (class-based) 都必须使用它们在其中定义的 class 前缀。
在这种情况下:
private val stateCallback =
AudioBase.CallbackTest {
Log.i(TAG, "onCall:() called")
您好,我正在尝试使用继承 AudioBase.java 的 AudioChild.java 来解决在我的 AudioBase.java 中定义的接口“CallbackTest”。但是在尝试这样做时它给出了 Unresolved reference 的编译错误。
这是我的 class 定义:
AudioBase.java
package com.testapp.kotlinexample.classes;
public class AudioBase {
public interface CallbackTest {
void onCall(int var1);
}
}
Child Class AudioChild.java
package com.testapp.kotlinexample.classes;
import android.util.Log;
public class AudioChild extends AudioBase{
private static final String TAG = "AudioChild";
public void someOtherMethod() {
Log.i(TAG, "in someOtherMethod()");
}
}
MainActivity.kt
import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.testapp.kotlinexample.classes.AudioChild
class MainActivity : AppCompatActivity() {
private val TAG = "TestApp"
private var mContext: Context? = null
private val stateCallback =
AudioChild.CallbackTest { // Compilation error on this line
Log.i(TAG, "onCall:() called")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mContext = applicationContext
}
}
当我使用 AudioChild.CallbackTest 时出现以下编译错误:
未解决的参考:CallbackTest
谁能帮我理解为什么会出现这个错误?
我不是科特林专家,但我知道 java 并用谷歌搜索了一下:
静态方法(看起来 class/interface 定义)不被继承。
基本上只有实例(non-static)成员被继承。静态引用的所有内容 (class-based) 都必须使用它们在其中定义的 class 前缀。
在这种情况下:
private val stateCallback =
AudioBase.CallbackTest {
Log.i(TAG, "onCall:() called")