此代码使用用于从伴随对象访问常量的限定名称成功编译:
enum class CampsiteCategoryCode(val code: String) {
TENT(CampsiteCategoryCode.TENT_CODE), // intellij says 'Redundant qualifier name'
OTHER(CampsiteCategoryCode.OTHER_CODE), // intellij says 'Redundant qualifier name'
LODGING(CampsiteCategoryCode.LODGING_CODE), // intellij says 'Redundant qualifier name'
RV(CampsiteCategoryCode.RV_CODE); // intellij says 'Redundant qualifier name'
override fun toString() = code
companion object {
const val TENT_CODE = "tent"
const val OTHER_CODE = "other"
const val LODGING_CODE = "lodging"
const val RV_CODE = "rv"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,没有限定符名称的相同代码将使编译失败:
enum class CampsiteCategoryCode(val code: String) {
TENT(TENT_CODE), // Variable 'TENT_CODE' must be initialized
OTHER(OTHER_CODE), // Variable 'OTHER_CODE' must be initialized
LODGING(LODGING_CODE), // Variable 'LODGING_CODE' must be initialized
RV(RV_CODE); // Variable 'RV_CODE' must be initialized
override fun toString() = code
companion object {
const val TENT_CODE = "tent"
const val OTHER_CODE = "other"
const val LODGING_CODE = "lodging"
const val RV_CODE = "rv"
}
}
Run Code Online (Sandbox Code Playgroud)
为什么指定限定符名称允许此代码编译?或者换一种说法,为什么不具有限定符名称让代码编译失败?
这companion object将在您的类可用时(编译时)实例化。然后你告诉你的类,为了让它可用,它需要一个尚不可用的类(因为你现在正在编译它,显然,Kotlin 在伴随对象之前提供枚举案例)
我不能确定这是否来自 Kotlin,但为了避免这种情况,请在此类之外声明您的常量
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |