How do I access a Java static method on a Kotlin subclass?
我创建了一个Java类的KOTLIN子类:
1 2 3 4 5 6 7 8 | class AlarmReceiver : WakefulBroadcastReceiver() { companion object { const val ACTION_NOTIFY ="..." } override fun onReceive(context: Context, intent: Intent) { ... } } |
static boolean completeWakefulIntent(Intent intent) static ComponentName startWakefulService(Context context, Intent intent)
从我的
如果我从不同的Kotlin类尝试
Unresolved reference: completeWakefulIntent
我认为这是因为编译器试图解析
1 2 3 4 5 6 7 8 9 10 11 12 | 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中,不同于Java,静态成员不是由子类继承的,即使它们可以在没有基类名称的子类内调用。
在子类外部,必须使用基类名称调用基类静态函数:
1 | WakefulBroadcastReceiver.completeWakefulIntent(intent) |
这种行为似乎在伴生对象概念中:层次结构中类的伴生对象不包含在彼此中。
有趣的是,对于接口来说,情况有点不同:没有接口名称的子类中不能引用接口静态成员。此行为与Java中的相同。