2017-09-25 10 views
0

该应用程序定义常量在科特林singleton对象:为什么试图访问常量值时未解决的参考?

@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测试版)提供一个提示添加导入对于常量,并没有给出任何问题的迹象(没有红色下划线等,并且方法中的常量引用以紫色斜体文本显示,表明它已经被解决),但是当我构建项目时,我得到这个:

Error: Unresolved reference: HTTP_RESPONSE_CODE_NOT_AUTHORIZED 

我试着清理IDE缓存并重新启动它,并做一个干净的构建,这没有什么区别。我尝试删除@JvmName注释,甚至将常量值放在没有包含对象的文件的根目录下,但都不允许构建。

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

回答

1

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