You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin枚举类中参数加val与不加val的区别是什么?

Kotlin枚举类参数加val和不加的核心区别

简单说,两者的本质是是否把构造参数暴露成枚举实例的公开属性:

1. 不加val:只是构造函数的局部参数

这个参数只能在枚举类的内部代码中使用(比如重写toString()、自定义成员函数),外部代码完全访问不到。

举个例子:

enum class PaymentType(paymentName: String) {
    CASH("现金"),
    CARD("银行卡");

    // 枚举内部可以用这个参数
    override fun toString(): String {
        return "支付方式:$paymentName"
    }
}

// 外部这么写会直接编译报错:找不到paymentName这个成员
// println(PaymentType.CASH.paymentName)

2. 加val:变成枚举实例的公开只读属性

加上val后,这个参数会被自动转换成枚举类的公开只读属性,外部代码可以直接通过枚举实例访问它的值,而且因为是val,这个属性不能被修改(符合枚举的不可变特性)。

例子:

enum class PaymentType(val paymentName: String) {
    CASH("现金"),
    CARD("银行卡");
}

// 外部可以直接读取属性值
println(PaymentType.CASH.paymentName) // 输出:现金

总结

  • 如果只是在枚举内部需要用到这个参数(比如用来生成toString的内容),不需要外部访问,就可以不加val;
  • 如果需要外部代码通过枚举实例获取这个参数的值,就必须加val(或者var,但枚举属性一般用val,因为枚举实例是固定不变的)。

内容的提问来源于stack exchange,提问作者MrFlavour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:23:15