lam*_*das 4 scala scala-collections
虽然看着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) }
Run Code Online (Sandbox Code Playgroud)
和一些使用synchronized形式
override def isEmpty: Boolean = synchronized { super.isEmpty }
override def pop(): A = synchronized { super.pop }
Run Code Online (Sandbox Code Playgroud)
有什么不同?
synchronized(由声明AnyRef)的签名是
final def synchronized[T0](arg0: => T0): T0
Run Code Online (Sandbox Code Playgroud)
如果你用它
override def isEmpty: Boolean = synchronized { super.isEmpty }
Run Code Online (Sandbox Code Playgroud)
然后你把它留给编译器来推断传递给synchronized(这里Boolean)的函数的返回类型.如果你用它
override def push(elem: A): this.type = synchronized[this.type] {
super.push(elem)
}
Run Code Online (Sandbox Code Playgroud)
然后你明确指定返回类型(这里this.type).我假设编译器不会推断this.type- 哪些状态表明你确切地返回了this对象 - 但是它会推断它SynchronizedStack或其中一个超类型,它不像那样精确this.type.
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |