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
问题原因
  1. 在 Kotlin 中,object 声明创建的是单例对象,Kotlin 可以直接通过类名调用其方法
MyLogTool.saveLogcatToFile(context)
  1. 在 Java 中,Kotlin 的 object 被编译为一个类,并生成一个静态的 INSTANCE 字段,需要通过 INSTANCE 来访问单例实例的方法
MyLogTool.INSTANCE.saveLogcatToFile(context);
处理策略
  1. 方案 1:通过 INSTANCE 调用
MyLogTool.INSTANCE.saveLogcatToFile(context);
  1. 方案 2:使用 @JvmStatic 注解,这样在 Java 中就可以直接调用了
object MyLogTool {

    @JvmStatic
    fun saveLogcatToFile(context: Context): Boolean { ... }
    
    @JvmStatic
    fun cleanOldLogFiles(logDir: File, keepCount: Int) { ... }
}
MyLogTool.saveLogcatToFile(context);

更多推荐