我了解Singleton对象是什么,但是仔细阅读一个库我遇到了让我感到困惑的事情:混入Singleton
trait Foo[A <: Bar with Singleton]
我似乎无法找到这意味着什么的信息。 A是Bar-with-Singleton访问的子类型? Singleton混合提供什么?
答案 0 :(得分:3)
此处有一个相关问题:Is scala.Singleton pure compiler fiction?
在这里:Why do String literals conform to Scala Singleton
这可能有助于理解scala.Singleton
&#34; Singleton类型本质上是带有值的存在的编码技巧。即。
T forSome { val x: T }
变成了
[x.type := X] T forSome { type X <:T with Singleton }
这不是你通常会自己使用的东西。虽然您可以使用Singleton来强制执行Singleton类型作为方法的参数。 e.g。
object X
class C
def foo[T<:Singleton](singleton: T): Unit = {
print(singleton.getClass.getName)
}
foo(X) //This would work, outputs X$
foo(new C) //This would not work
答案 1 :(得分:0)
Singleton
是所有object
继承的特殊类型。因此,这意味着A
只能是SomeObject.type
,其中SomeObject
是object
扩展Bar
。或Nothing
,因为它不幸是任何事物的子类型。