I have a data class in Kotlin where I have values depending on each other,
for example
data class test(
var a: Int = 0,
var b: Int = 10 a,
)
If the value for a is updated I want the value for b to automatically change.
How can I do this?
CodePudding user response:
You can create a property backed by another one like this:
data class test(
var a: Int = 0,
) {
var b: Int
get() = a 10
set(value) {
a = value - 10
}
}
Or even make it an extension over test class.
Just note b won't be settable with constructor. it won't be automatically included in equals(), hashCode() and other methods. It actually makes sense, because it is effectively just a duplicate of a.
CodePudding user response:
You need a custom setter/delegate for a, but it can't be added for primary constructor property, so you can't use data class here, only a simple one:
class Test(a: Int = 0, var b: Int = 10 a) {
var a by Delegates.observable(a) { _, _, newValue -> this.b = 10 newValue }
}
Also, if you want to enforce this relation between a and b you need to disable direct change of b value (including setting in the constructor):
class Test(a: Int = 0) {
var a by Delegates.observable(a) { _, _, newValue -> this.b = 10 newValue }
var b = 10 a
private set
}
