如何在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
相关产品推荐
相关产品推荐

