如何修改传递给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 给出的解决方案也不包括提供防御性副本,您可能希望这样做以避免访问修改内部 属性 字段。
假设我有一个数据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。根据另一个解决方案的