You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使接口默认实现的函数支持@JvmStatic供Java静态调用?

如何让接口默认实现的方法通过companion object被Java静态调用?

直接让companion object实现带默认方法的接口时,Java无法通过Foo.bar()静态调用接口的默认方法——因为接口默认方法会被编译为Companion实例的方法,而非Java静态方法。但可以通过显式重写接口方法并添加@JvmStatic注解来实现需求。

解决方案示例

1. 定义带默认实现的接口

interface Bar {
    fun bar() {
        // 接口默认实现逻辑
        println("默认的bar方法实现")
    }
}

2. 在companion object中重写方法并添加@JvmStatic

class Foo {
    companion object : Bar {
        @JvmStatic
        override fun bar() {
            // 直接复用接口默认实现,也可以自定义逻辑
            super.bar()
        }
    }
}

3. Java中静态调用

// 正常编译运行
Foo.bar();

原理说明

  • @JvmStatic注解的作用是让Kotlin编译器为companion object的成员生成对应的Java静态方法。
  • 接口的默认方法本身不属于companion object的成员,因此必须显式重写该方法并标注@JvmStatic,才能将其暴露为Java可调用的静态方法。
  • 如果不重写,Java只能通过Foo.Companion.bar()调用接口默认方法,无法直接静态调用。

内容的提问来源于stack exchange,提问作者Matthew Layton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:01:09