如果我有一个对象的实例,有没有办法检查我是否有一个单例对象而不是一个类的实例?有没有办法可以做到这一点?可能是一些反思API?我知道一个区别是单例对象的类名以a结尾$,但这不是一种严格的方法.
Tra*_*own 22
是的,使用记录很少的scala.Singleton类型:
def isSingleton[A](a: A)(implicit ev: A <:< Singleton = null) =
Option(ev).isDefined
Run Code Online (Sandbox Code Playgroud)
然后:
scala> val X = new Foo(10)
X: Foo = Foo@3d5c818f
scala> object Y extends Foo(11)
defined object Y
scala> isSingleton(X)
res0: Boolean = false
scala> isSingleton(Y)
res1: Boolean = true
Run Code Online (Sandbox Code Playgroud)
我的isSingleton方法只是一个演示,它提供了一个运行时布尔值,告诉您表达式是否静态类型为单例类型,但您也可以Singleton在编译时使用类型为单例类型的证据.