首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`synchronized`的用法不同

`synchronized`的用法不同
EN

Stack Overflow用户
提问于 2012-08-13 14:04:20
回答 1查看 341关注 0票数 4

在查看scala.collection.mutable.SynchronizedStack时,我注意到synchronized的用法有所不同,有些方法使用synchronized[this.type]表单

代码语言:javascript
复制
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表单

代码语言:javascript
复制
override def isEmpty: Boolean = synchronized { super.isEmpty }
override def pop(): A = synchronized { super.pop }

有什么关系呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-13 14:19:04

synchronized (由AnyRef声明)的签名是

代码语言:javascript
复制
final def synchronized[T0](arg0: => T0): T0

如果您将其用作

代码语言:javascript
复制
override def isEmpty: Boolean = synchronized { super.isEmpty }

然后,让编译器来推断传递给synchronized (这里是Boolean)的函数的返回类型。如果您将其用作

代码语言:javascript
复制
override def push(elem: A): this.type = synchronized[this.type] {
  super.push(elem)
}

然后显式指定返回类型(这里是this.type)。我假设编译器不会推断this.type -这说明您将准确地返回this对象-,但它会推断SynchronizedStack或它的超类型之一,这不像this.type那么精确。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11928907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档