【问题标题】:Mutability in kotlin objectkotlin 对象的可变性
【发布时间】:2021-11-30 21:00:30
【问题描述】:

我正在研究 Kotlin 中的可变性特例。

这是我正在玩的代码:

var a = 350
val b = a
a = 8
println(b) // 350. ===> should be 8

我想将b 保留为val,但同时它应该能够在每次修改a 变量时获取a 的值。

所以我尝试了对象解决方案,但如下所示,x 变量不可访问。我想这个解决方案不正确。

val object1 = object {
    var x = 350
}
val object2 = object1
object1.x = 8
println(object2.x)

有没有办法同步这个x,但不将块放在同步注释函数中,如下所示?

@Synchronized
fun someFunction(): Int {

    val object1 = object {
        var x = 350
    }
    val object2 = object1
    object1.x = 8
    println(object2.x)

return object2.x
}
someFunction()

【问题讨论】:

  • 为什么需要同步呢?同时设置一个属性是安全的(只要它没有背后的逻辑)。

标签: kotlin concurrency synchronized


【解决方案1】:

您可以将b 定义为引用a 的属性:

var a=350
val b: Int
    get()=a

每次您访问b,它都会将该访问重定向到a

以下将打印8,您不必使用您的对象解决方案:

var a=350
val b: Int
    get()=a
fun main() {
    a=8
    println(b)
}

【讨论】:

  • 显然它比同步函数解决方案更有效。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 2012-03-11
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多