有没有办法以更不变的方式实现以下目标?
abstract class Abstract {
abstract val general1: String
abstract var counter: Int // Don't want to use var here
fun sumCounter(value: Int) {
counter += value
}
}
data class A (
val a1: String,
override val general1: String,
override var counter: Int = 0,
): Abstract()
data class B (
val b1: String,
val b2: String,
override val general1: String,
override var counter: Int = 1,
): Abstract()
fun <T : Abstract> doSomething(obj: T) {
//...
obj.sumCounter(10) // I want: val newObj = obj.sumCounter(10)
println(obj) // A(a1=a1, general1=general1, counter=10)
// B(b1=b1, b2=b2, general1=general1, counter=11)
//...
}
fun myMain() {
val a = A("a1", "general1")
doSomething(a)
val b = B("b1", "b2", "general1")
doSomething(b)
}
这可能是一些 Kotlin 技巧、功能方法或设计模式,以避免在
A
和 B
中创建相同的方法。但我不想使用反射或转换为 json 并返回。