同伴总是这个班的实例吗?

时间:2016-08-13 19:58:18

标签: scala singleton

我在scala中阅读了the article关于单例对象的内容,但是如果它是一个类的实例则没有找到关于它的内容。 以下简单程序告诉我,对于这个特例,它是真的:

class TestMatch(val i: Int)

object TestMatch{
  def apply(i: Int) = new TestMatch(i)
  def unapply(tm : TestMatch): Option[Int] = Some(tm.i)
}

我试着将其测试为:

println(TestMatch.isInstanceOf[TestMatch]) //false

但它生成了警告fruitless type test。 我不确定如何进行这样的测试。

1 个答案:

答案 0 :(得分:6)

object始终是匿名类的实例,其正文是object定义的正文。如果定义不包含extends子句,则该类直接从AnyRef继承。

因此TestMatch对象可能是TestMatch类的实例的唯一方法就是编写object TestMatch extends TestMatch(something) {...}。由于您没有这样做,TestMatch不是代码中TestMatch的实例。

PS:您收到测试代码警告的原因是Scala已经在编译时确切知道TestMatch的类型是什么,因此它知道运行时测试只能永远导致false,因此#34;没有结果"。一般情况下,如果在运行时之前未确定某些确切类型的事物,那么您将使用运行时类型测试,因此测试可能是真或假。