我在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
。
我不确定如何进行这样的测试。
答案 0 :(得分:6)
object
始终是匿名类的实例,其正文是object
定义的正文。如果定义不包含extends
子句,则该类直接从AnyRef
继承。
因此TestMatch
对象可能是TestMatch
类的实例的唯一方法就是编写object TestMatch extends TestMatch(something) {...}
。由于您没有这样做,TestMatch
不是代码中TestMatch
的实例。
PS:您收到测试代码警告的原因是Scala已经在编译时确切知道TestMatch
的类型是什么,因此它知道运行时测试只能永远导致false
,因此#34;没有结果"。一般情况下,如果在运行时之前未确定某些确切类型的事物,那么您将使用运行时类型测试,因此测试可能是真或假。