为什么有关尝试访问常量值的未解决参考?

时间:2017-09-25 08:31:23

标签: android android-studio kotlin

该应用程序定义了Kotlin单例对象中的常量:

@file:JvmName("APIConstants")
package com.myapp.api

object APIConstants {
    const val HTTP_RESPONSE_CODE_NOT_AUTHORIZED = 401
    etc....
}

然后将它们用于另一个类:

import com.myapp.api.APIConstants.HTTP_RESPONSE_CODE_NOT_AUTHORIZED
etc ...

class API {

    private fun returnBadResponse(response: Response<*>, callback: ApiAuthListener<*>) {
    if (response.code() == HTTP_RESPONSE_CODE_NOT_AUTHORIZED) {
        callback.onBadAuthToken()
    } else {
        callback.onFailure(response.message(), getServerError(response))
    }
}

在这个类中,Android Studio(3.0 beta)提供了一个提示,为常量添加导入,并且它没有给出任何问题的指示(没有红色下划线等,并且方法中的常量引用以紫色显示斜体文本表明它已经解决了)但是当我构建项目时,我得到了这个:

Error: Unresolved reference: HTTP_RESPONSE_CODE_NOT_AUTHORIZED

我已经尝试清除IDE缓存并重新启动它,并进行干净的构建,这没有任何区别。我尝试删除@JvmName注释,甚至将const值放在文件的根目录中,不包含对象,但都不允许构建。

为什么类没有引用常量,特别是当IDE强烈建议它可以解析它时?

1 个答案:

答案 0 :(得分:1)

解决方案是......确保所有Kotlin源文件都有.kt文件扩展名!在这种情况下,APIConstants文件被称为“APIConstants”而不是“APIConstants.kt”,这似乎意味着IDE能够根据文件的内容解析引用,但构建工具不能。令人困惑的是Android Studio在文件名上显示了Kotlin K图标,尽管缺少.kt扩展名。