【发布时间】:2017-01-03 10:21:40
【问题描述】:
我创建了一个 Java 类的 Kotlin 子类:
class AlarmReceiver : WakefulBroadcastReceiver() {
companion object {
const val ACTION_NOTIFY = "..."
}
override fun onReceive(context: Context, intent: Intent) { ... }
}
WakefulBroadcastReceiver 有两个静态方法:
static boolean completeWakefulIntent(Intent intent)static ComponentName startWakefulService(Context context, Intent intent)
并在我的AlarmReceiver 类中调用它们,正如我所期望的那样。但是,我想在我的 Kotlin 子类之外调用这些方法之一。
问题
如果我从不同的 Kotlin 类尝试 AlarmReceiver.completeWakefulIntent(intent),我会收到以下编译错误:
未解决的参考: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)
}
...
}
我认为如果我依赖从 Java 子类继承的默认方法,我会得到相同的行为,但我想知道是否有更好的方法来做到这一点。
有没有办法在 Kotlin 子类上调用继承的静态 Java 方法?
【问题讨论】:
标签: kotlin