有没有之间的差异classOf[String].isInstance("42")和"42".isInstanceOf[String]?
如果是的话,你能解释一下吗?
对于参考类型(扩展的类型AnyRef),最终结果没有区别.isInstanceOf然而,它受到了很多鼓励,因为它更具惯用性(并且可能更有效).
对于原始值类型,例如数字和布尔值,存在差异:
scala> val x: Any = 5
x: Any = 5
scala> x.isInstanceOf[Int]
res0: Boolean = true
scala> classOf[Int].isInstance(x)
res1: Boolean = false
Run Code Online (Sandbox Code Playgroud)
这是因为原始值类型在被上传到Any(或AnyVal)时被加框.对于JVM,它们显示为java.lang.Integers,而不再是Ints.在isInstanceOf知道这一点,并会做正确的事.
一般来说,没有理由使用,classOf[T].isInstance(x)如果你知道那是什么T.如果你有一个泛型类型,并且你想"传递"一种方法来测试一个值是否属于那个类(将通过isInstanceOf测试),你可以使用一个scala.reflect.ClassTag.ClassTags有点像Classes,除了他们知道Scala拳击和其他一些东西.(ClassTag如果需要,我可以详细说明,但你应该在其他地方找到关于它们的信息.)