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

如何在Kotlin类中调用Java接口?解决非法访问错误

解决Kotlin调用Java接口时的IllegalAccessError问题

问题核心

这个错误是因为Kotlin自动生成的Lambda实现类(DownloadScreen$$ExternalSyntheticLambda1)无法访问你的InterfaceCallback接口,本质是接口或相关方法的访问权限配置错误。

具体解决方案

1. 把InterfaceCallback接口设为public

Java中默认的包级访问权限(无修饰符)会限制跨包或合成类的访问,必须显式声明为public:

// 修正后的InterfaceCallback定义
public interface InterfaceCallback {
    void onCallback(String data); // Java接口方法默认public,可省略显式声明
}

2. 检查Utils类的getCallbackEvent方法权限

确保该方法本身以及参数中的InterfaceCallback类型都是public:

public class Utils {
    // 方法和参数必须为public,保证外部可调用
    public void getCallbackEvent(Context context, String videoLink, InterfaceCallback callback) {
        // 方法逻辑实现
    }
}

3. 用匿名内部类替代Lambda(兜底方案)

如果权限调整后仍有异常,直接使用Java风格的匿名内部类实现接口,绕过Kotlin合成类的权限问题:

Utils().getCallbackEvent(this, videoLink, object : InterfaceCallback {
    override fun onCallback(data: String) {
        Log.e(TAG, "getCallbackEvent: $data")
    }
})

4. 清理重建项目

缓存的旧类文件可能引发权限异常,执行以下操作:

  • 点击Android Studio的Build -> Clean Project
  • 再执行Build -> Rebuild Project

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:40:58