Kotlin有一个const关键字。但我认为Kotlin中的常数不是我认为的常数。与C ++中的const似乎有很大的不同。在我看来,它仅适用于静态成员以及Java中的原语,而不能针对类变量进行编译:
data class User(val name: String, val id: Int)
fun getUser(): User { return User("Alex", 1) }
fun main(args: Array<String>) {
const val user = getUser() // does not compile
println("name = ${user.name}, id = ${user.id}")
// or
const val (name, id) = getUser() // does not compile either
println("name = $name, id = $id")
}
由于这似乎不起作用,我认为我真正想要的是第二类,该类删除了我不希望支持的操作:
class ConstUser : User
{
ConstUser(var name: String, val id: int) : base(name, id)
{ }
/// Somehow delte the setters here?
}
这种方法的明显缺点是,万一我改变了User
,我一定不要忘记改变这个班级,这对我来说似乎很危险。
但是我不确定该怎么做。所以问题是:如何在意识形态的科特林中制造不可变的物体?
const
Kotlin中的修饰符用于编译时常量。不变性是通过val
关键字完成的。
Kotlin具有两种类型的属性:只读val
和可变var
。val
s等同于Java的final
s(const
尽管我不知道在C ++中它是如何与之相关的),并且这样声明的属性或变量一旦设置就无法更改其值:
data class User(val name: String, val id: Int)
val user = User("Alex", 1)
user.name = "John" // won't compile, `val` cannot be reassigned
user = User("John", 2) // won't compile, `val` cannot be reassigned
您不必以某种方式隐藏或删除任何val
属性的设置器,因为此类属性没有设置器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句