我创建了一个Java类的Kotlin子类:
class AlarmReceiver : WakefulBroadcastReceiver() {
companion object {
const val ACTION_NOTIFY = "..."
}
override fun onReceive(context: Context, intent: Intent) { ... }
}
Run Code Online (Sandbox Code Playgroud)
WakefulBroadcastReceiver 有两种静态方法:
static boolean completeWakefulIntent(Intent intent)static ComponentName startWakefulService(Context context, Intent intent)从我的AlarmReceiver班级中调用这些就像我期望的那样.但是,我想在我的Kotlin子类之外调用其中一种方法.
如果我尝试AlarmReceiver.completeWakefulIntent(intent)使用不同的Kotlin类,我会收到以下编译错误:
未解决的参考:completeWakefulIntent
我认为这是因为编译器试图在AlarmReceiver伴随对象上解析方法,而不是从其超类中查找继承的方法.作为一种解决方法,我可以直接定义具有相同签名的方法AlarmReceiver.Companion:
class AlarmReceiver : WakefulBroadcastReceiver() {
companion object {
const val ACTION_NOTIFY = "..."
// Just call the superclass implementation for now
fun completeWakefulIntent(intent: Intent): Boolean =
WakefulBroadcastReceiver.completeWakefulIntent(intent)
}
...
}
Run Code Online (Sandbox Code Playgroud)
我认为这与我依赖Java子类的默认继承方法时会有相同的行为,但我想知道是否有更好的方法来做到这一点.
有没有办法在Kotlin子类上调用继承的静态Java方法?
hot*_*key 14
在Kotlin中,与Java不同,静态成员不是由子类继承的,即使它们可以在没有基类名的子类内调用.
在子类之外,您必须使用基类名称调用基类静态函数:
WakefulBroadcastReceiver.completeWakefulIntent(intent)
Run Code Online (Sandbox Code Playgroud)
此行为似乎位于伴随对象概念中:层次结构中的类的伴随对象不会彼此包含在内.
有趣的是,对于接口,情况有点不同:没有接口名称,接口静态成员不能在子类中引用.此行为与Java中的行为相同.
| 归档时间: |
|
| 查看次数: |
1770 次 |
| 最近记录: |