如何从Kotlin companion object中调用Java Activity类的公共方法
解决方案
- 优先检查包导入配置
确认Kotlin文件顶部已正确导入SampleActivity的全类名,若两类不在同一个包下,必须添加导入语句import 你的应用包名.SampleActivity,包名不匹配是Kotlin无法识别Java类方法的最常见原因。 - 清理构建缓存
Android Studio 跨语言调用识别异常大概率是构建缓存导致的,按以下步骤操作即可恢复:- 点击顶部菜单栏
File -> Invalidate Caches... - 勾选
Clear file system cache and local history后点击Invalidate and Restart - 重启后重新构建项目
- 点击顶部菜单栏
- 优化类型转换逻辑
你当前的强转逻辑如果传入非SampleActivity类型的Context会直接崩溃,建议改为安全调用写法:(context as? SampleActivity)?.toggleMark(true) - 回滚错误的static修改
你当前是通过SampleActivity实例调用成员方法,不需要将toggleMark改为static,改回原本的public非静态成员方法即可,静态方法无法通过实例调用,反而会触发报错。
完整正确代码示例
Java 侧(保持原有逻辑即可)
public class SampleActivity extends Activity{ public void toggleMark(boolean canTic) { // 原有业务逻辑 } }
Kotlin 侧
// 替换为你自己项目中SampleActivity的实际包名 import com.yourpackage.name.SampleActivity import android.content.Context class MyUtils { companion object { fun setTicPref(context: Context) { // 原有业务逻辑 (context as? SampleActivity)?.toggleMark(true) } } }
内容的提问来源于stack exchange,提问作者Rajnikant B
相关产品推荐
相关产品推荐

