欢迎光临
我们一直在努力

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)
    未经允许不得转载:171主机测评 » Kotlin object Java 静态调用问题:Non-static method ‘...‘ cannot be referenced from a static context
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址