Kotlin object Java 静态调用问题:Non-static method ‘...‘ cannot be referenced from a static context
·
object MyLogTool {
fun saveLogcatToFile(context: Context): Boolean { ... }
fun cleanOldLogFiles(logDir: File, keepCount: Int) { ... }
}
MyLogTool.saveLogcatToFile(context);
- 使用 Kotlin 写了一个日志工具类,在 Java 代码中调用时,出现如下错误信息
Non-static method 'saveLogcatToFile(android. content. Context)' cannot be referenced from a static context
问题原因
- 在 Kotlin 中,object 声明创建的是单例对象,Kotlin 可以直接通过类名调用其方法
MyLogTool.saveLogcatToFile(context)
- 在 Java 中,Kotlin 的 object 被编译为一个类,并生成一个静态的 INSTANCE 字段,需要通过 INSTANCE 来访问单例实例的方法
MyLogTool.INSTANCE.saveLogcatToFile(context);
处理策略
- 方案 1:通过 INSTANCE 调用
MyLogTool.INSTANCE.saveLogcatToFile(context);
- 方案 2:使用
@JvmStatic注解,这样在 Java 中就可以直接调用了
object MyLogTool {
@JvmStatic
fun saveLogcatToFile(context: Context): Boolean { ... }
@JvmStatic
fun cleanOldLogFiles(logDir: File, keepCount: Int) { ... }
}
MyLogTool.saveLogcatToFile(context);
更多推荐


所有评论(0)