繁体   English   中英

在数据类主构造函数中使用私有字段是一种好习惯吗?

[英]Is it good practice to use private fields in data class primary constructor?

我想编写代码,使其对每个人都有意义并由专家跟随,所以我想知道将数据类字段设为私有并仅通过执行某些操作让它们通过公共字段访问是否好 我在下面添加了一个示例来解释我的问题。 我知道我可以将字段设为私有,编译器会同意的。 我问这个问题是因为我见过只有公共字段的数据类,我的项目需要在我们访问它们之前对字段执行一些操作,因此为了实现这一点,我已经将它们设为私有,如下例所示,但现在我在想这是一个好的做法,否则我可以做得最好。

data class BatteryDemo(
    private val _level: Int,
    private val _temperature: Int,
    private val _voltage: Int,
) {
    val level get() = _level.toString()
    val temperature get() = _temperature.toString()
    val voltage get() = _voltage.toString()

}

好吧,如果您愿意或有一个引人注目的用例,您可以这样做。 很多 Kotlin 的 Java 新特性没有产生关于我们应该如何使用它们的问题,因为它们并没有长期建立的行业模式。

就我个人而言,我从未使用过私有 val,也从未见过有人在数据类中使用过私有 val。 如果您关心,它确实会破坏课堂之外的解构,因此您将无法使用私有字段执行val (level, temperature, voltage) = batteryDemo

一些可能的替代方案:

// Secondary Constructor

data class BatteryDemo(
    val level: String,
    val temperature: String,
    val voltage: String,
) {
    constructor(level: Int, temperature: Int, voltage: Int) : this(level.toString(), temperature.toString(), voltage.toString())
}

// Creation function

data class BatteryDemo(
    val level: String,
    val temperature: String,
    val voltage: String,
) {
    companion object {
        fun newInstance(level: Int, temperature: Int, voltage: Int): BatteryDemo {
            return BatteryDemo(level.toString(), temperature.toString(), voltage.toString())
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM