data class 中的参数在 Kotlin 中可以是 var 吗?
Can the parameter in data class be var in Kotlin?
我是Kotlin初学者,看过一些关于data的示例代码class,好像参数都是val类型,和代码A一样
我需要改变一些数据的值class MSetting,所以我设计了Code B,请问Code B好不好?
代码A
data class MSetting (
val _id: Long,
val name: String,
val createdDate: Long,
val description: String
)
代码B
data class MSetting (
var _id: Long,
var name: String,
var createdDate: Long,
var description: String
)
it seems that the parameter are all val
type...
否
could you tell me whether the Code B is good way?
val
和var
的区别:用val
声明的属性不能随时间更新;它就像 java 中的常数。用 var
声明的属性可以随时间更改。
这完全取决于您的要求。如果您需要随时间更改属性,请选择 var
; val
否则。您可以将两者混合在一个对象中,没有任何问题。
在此处阅读有关 Kotlin 文档中属性的更多信息 https://kotlinlang.org/docs/reference/properties.html
我喜欢使用 val 作为经验法则,因为它使数据 class 不可变。当然,我正在使用 var 但只有在必要时才使用。为什么让数据 class 不可变更好? read this.
这完全取决于您的应用程序。正如我们所知,val 是不可变的变量类型——一旦赋值,我们就无法更改它的值,而 var 是可变数据类型——可以更改或重新分配值。
因此,如果您有需要从该数据 class 更改值的要求,请使用 -“var”,否则您可以使用“val”。
数据类和解构声明
data class Person(val name: String) {
var age: Int = 0
}
在toString()、equals()、hashCode()、copy()实现中只会使用属性名称,并且只有一个组件函数component1()。虽然两个 Person 对象可以有不同的年龄,但它们将被视为相等。
val person1 = Person("John")
val person2 = Person("John")
person1.age = 10
person2.age = 20
我是Kotlin初学者,看过一些关于data的示例代码class,好像参数都是val类型,和代码A一样
我需要改变一些数据的值class MSetting,所以我设计了Code B,请问Code B好不好?
代码A
data class MSetting (
val _id: Long,
val name: String,
val createdDate: Long,
val description: String
)
代码B
data class MSetting (
var _id: Long,
var name: String,
var createdDate: Long,
var description: String
)
it seems that the parameter are all
val
type...
否
could you tell me whether the Code B is good way?
val
和var
的区别:用val
声明的属性不能随时间更新;它就像 java 中的常数。用 var
声明的属性可以随时间更改。
这完全取决于您的要求。如果您需要随时间更改属性,请选择 var
; val
否则。您可以将两者混合在一个对象中,没有任何问题。
在此处阅读有关 Kotlin 文档中属性的更多信息 https://kotlinlang.org/docs/reference/properties.html
我喜欢使用 val 作为经验法则,因为它使数据 class 不可变。当然,我正在使用 var 但只有在必要时才使用。为什么让数据 class 不可变更好? read this.
这完全取决于您的应用程序。正如我们所知,val 是不可变的变量类型——一旦赋值,我们就无法更改它的值,而 var 是可变数据类型——可以更改或重新分配值。 因此,如果您有需要从该数据 class 更改值的要求,请使用 -“var”,否则您可以使用“val”。
数据类和解构声明
data class Person(val name: String) {
var age: Int = 0
}
在toString()、equals()、hashCode()、copy()实现中只会使用属性名称,并且只有一个组件函数component1()。虽然两个 Person 对象可以有不同的年龄,但它们将被视为相等。
val person1 = Person("John")
val person2 = Person("John")
person1.age = 10
person2.age = 20