Kotlin访问Java_如何在Kotlin子类上访问Java静态方法?

本文探讨了在Kotlin中如何正确地调用继承自Java超类的静态方法,并提供了解决方案,同时对比了Kotlin与Java在处理此类问题上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我创建了一个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),我会得到以下编译错误:

Unresolved reference: 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中,不同于Java,静态成员不是由子类继承的,即使它们可以在没有基类名称的子类内调用。

在子类外部,必须使用基类名称调用基类静态函数:

WakefulBroadcastReceiver.completeWakefulIntent(intent)

这种行为似乎在伴生对象概念中:层次结构中类的伴生对象不包含在彼此中。

有趣的是,对于接口来说,情况有点不同:没有接口名称的子类中不能引用接口静态成员。此行为与Java中的相同。

啊,那就解释了。您是否知道在哪里记录了静态成员不是继承的?

不,我在医生那里没有提到过。最正式的解释似乎是@yole给出的。

谢谢!我也没在医生身上看到任何东西,可能自己也找不到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值