如何修改传递给kotlin数据的参数class?

How to modify the parameter pass to kotlin data class?

假设我有一个数据class

data class MyClass(val crop: Rect, val name: String)

但我想复制传入的 Rect,因为我不想稍后修改该值。我不想让来电者来电

MyClass(Rect(inCrop), "name")

在代码中。如何在我的数据中执行此操作 class?

谢谢。

我能想到的一个解决方法是:

data class MyClass(private var privateCrop: Rect, val name: String) {
    val crop get() = privateCrop

    init {
        privateCrop = Rect(privateCrop)
    }
}

您将 crop 设为私有并将其设为 var (privateCrop),然后为其添加 public getter。现在您可以将其复制到 init 块中。

但我得承认,这很丑。我认为这里更好的解决方案是将 Rect 更改为不可变的,但是如果 Rect 不在您的控制范围内,那么我想它不可能帮助。您也可以考虑使用常规 class.

您可能不想像这样更改数据 class。根据另一个解决方案的 ,您可能会发现此解决方案的其他特点。 @Sweeper 给出的解决方案也不包括提供防御性副本,您可能希望这样做以避免访问修改内部 属性 字段。