如何在Kotlin中创建不可变对象?

rtzui

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我一定不要忘记改变这个班级,这对我来说似乎很危险。

但是我不确定该怎么做。所以问题是:如何在意识形态的科特林中制造不可变的物体?

茉莉

constKotlin中修饰符用于编译时常量不变性是通过val关键字完成的

Kotlin具有两种类型的属性:只读val和可变varvals等同于Java的finals(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Vaadin中编辑不可变对象列表?

如何在Java中创建11不可变的HashMap?

如何在Java中创建不可变列表?

如何在Python中创建不可变列表?

如何在 Scala 中创建不可变的双向链表?

在JavaScript中创建不可变对象

如何在Javascript中使对象不可变

如何在Kotlin中创建可变的字母列表?

如何在 Kotlin 中创建对象列表?

如何使对象在Java中不可变

如何识别Java中的不可变对象

如何使对象在Java中不可变

在Python中对不可变对象进行操作时,如何创建新对象?

什么是可变类。我们如何在C#中创建一个可变且不可变的类

创建新对象以替换不可变对象中的值

如何快速创建抽象的不可变列表,例如Kotlin

如何在Kotlin中初始化大的不可变地图?

如何在Rust中解释对可变类型的不可变引用?

如何从Mongo数据源创建不可变的Java对象

如何知道对象是否由不可变创建

如何创建深层嵌套的不可变对象的多个副本?

如何在没有@BsonDiscriminator 的情况下使用 mongodb 和 lombook 中的不可变对象

如何在AngularJS中创建任何类型的不可变提供程序

如何在Java中创建一个空的不可变Scala映射?

如何在Postgres中创建过去90天的记录索引,使now()不可变

如何在 Spring boot 中创建不可变和单例类?

如何在不可变对象数组上添加键,值对?

如何在Kotlin中实现可变可选?

如何在Kotlin中过滤可变地图