Anthony Flores
04/06/2022, 10:13 PMclass SomeClass {
var string1: String = "Default"
var string2: String = "Default"
var string3: String = "Default"
}
and lets say in the first class, string1
is "Text," string2
, is "Other Text," and in the second class string1
is "String, " while string2
is still Default
I would want it so that the first string is "String," the second string is "Other Text," and string3
as "Default"Adam S
04/06/2022, 10:41 PMstring2="Other Text"
? Shouldn't it be "Default", because second.string1 != first.string1
?Anthony Flores
04/06/2022, 11:19 PMMichael de Kaste
04/07/2022, 9:06 AMString?
instead, but regardless. I dont know what you want with the copying over, but you can do:
import SomeClass.Companion.DEFAULT
class SomeClass {
companion object {
const val DEFAULT = "Default"
}
var string1: String = DEFAULT
var string2: String = DEFAULT
var string3: String = DEFAULT
}
fun main() {
val class1 = SomeClass().apply {
string1 = "Text"
string2 = "OtherText"
}
val class2 = SomeClass().apply {
string1 = "String"
}
val result1 = class2.string1.takeUnless(DEFAULT::equals) ?: class1.string1
val result2 = class2.string2.takeUnless(DEFAULT::equals) ?: class1.string2
val result3 = class2.string3.takeUnless(DEFAULT::equals) ?: class1.string3
println(result1)
println(result2)
println(result3)
}
this prints, in order:
String
OtherText
Default
if you instead have nullable string with null being the default, you can just do:
val result1 = class2.string1 ?: class1.string1
val result2 = class2.string2 ?: class1.string2
val result3 = class2.string3 ?: class1.string3
SomeClass::class.memberProperties.map {
it.name to (it.get(class2) ?: it.get(class1))
}.forEach(::println)
prints
(string1, String)
(string2, OtherText)
(string3, null)
Anthony Flores
04/07/2022, 4:20 PM