该应用程序定义了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强烈建议它可以解析它时?
答案 0 :(得分:1)
解决方案是......确保所有Kotlin源文件都有.kt文件扩展名!在这种情况下,APIConstants文件被称为“APIConstants”而不是“APIConstants.kt”,这似乎意味着IDE能够根据文件的内容解析引用,但构建工具不能。令人困惑的是Android Studio在文件名上显示了Kotlin K图标,尽管缺少.kt扩展名。