gpt4 book ai didi

scala - `synchronized` 使用方式不同

转载 作者:行者123 更新时间:2023-12-05 00:33:32 36 4
gpt4 key购买 nike

一边看 scala.collection.mutable.SynchronizedStack 我注意到 synchronized使用方式不同,有些方法使用 synchronized[this.type]形式

override def push(elem: A): this.type = synchronized[this.type] { super.push(elem) }
override def pushAll(xs: TraversableOnce[A]): this.type = synchronized[this.type] { super.pushAll(elems) }

和一些用途 synchronized形式
override def isEmpty: Boolean = synchronized { super.isEmpty }
override def pop(): A = synchronized { super.pop }

有什么不同?

最佳答案

签名synchronized (由 AnyRef 声明)是

final def synchronized[T0](arg0: => T0): T0

如果您将其用作
override def isEmpty: Boolean = synchronized { super.isEmpty }

然后你把它留给编译器来推断传递给 synchronized 的函数的返回类型(此处 Boolean)。如果您将其用作
override def push(elem: A): this.type = synchronized[this.type] {
super.push(elem)
}

然后您明确指定返回类型(此处 this.type )。我假设编译器不会推断 this.type - 说明您返回的内容正好是 this对象 -,但它会推断 SynchronizedStack或其父类(super class)型之一,它不如 this.type 精确.

关于scala - `synchronized` 使用方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928907/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com