gpt4 book ai didi

Kotlin 枚举构造函数参数 'must be initialized',带有没有限定符名称的伴随对象常量

转载 作者:行者123 更新时间:2023-12-02 11:48:21 25 4
gpt4 key购买 nike

此代码使用用于从伴随对象访问常量的限定名称成功编译:

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"
}
}

但是,没有限定符名称的相同代码编译失败:
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"
}
}

为什么指定限定符名称允许编译此代码?或者换句话说,为什么没有限定符名称会使代码无法编译?

最佳答案

那个companion object将在您的类可用时(编译时)实例化。然后你告诉你的类,为了让它可用,它需要一个尚不可用的类(因为你现在正在编译它,显然,Kotlin 在伴随对象之前提供枚举案例)

我不能确定这是否是 Kotlin 的意图,但为了避免这种情况,请在此类之外声明您的常量

关于Kotlin 枚举构造函数参数 'must be initialized',带有没有限定符名称的伴随对象常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57560580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com