为什么可以';我不能在Scala中的对象上调用asInstanceOf吗?

为什么可以';我不能在Scala中的对象上调用asInstanceOf吗?,scala,Scala,是否有一种方法可以在Scala对象上执行安装。尽管它是一个单例,但它仍然是一个实例。那么为什么我不能在这个单例上执行一个asInstanceOf 说: 根据定义,单例(即Scala对象)只有一个实例,由对象声明中使用的名称引用 还要注意,在类中,可以通过类名本身引用类型 case class B() val b = B() b.isInstanceOf[B] res: Boolean = true 然而,案例对象被证明是单个实例;参考其类型考虑 case object A A.isInst

是否有一种方法可以在Scala
对象上执行
安装
。尽管它是一个单例,但它仍然是一个实例。那么为什么我不能在这个单例上执行一个
asInstanceOf

说:

根据定义,单例(即Scala对象)只有一个实例,由对象声明中使用的名称引用

还要注意,在类中,可以通过类名本身引用类型

case class B()
val b = B()

b.isInstanceOf[B]
res: Boolean = true
然而,
案例对象
被证明是单个实例;参考其类型考虑

case object A

A.isInstanceOf[A.type]
res: Boolean = true
实际上,你可以:

$ scala
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_39).
Type in expressions to have them evaluated.
Type :help for more information.

scala> case object MyObject
defined module MyObject

scala> val x: Any = MyObject
x: Any = MyObject

scala> x.asInstanceOf[MyObject.type]
res0: MyObject.type = MyObject

好。。。原因是因为它不仅仅是一个简单的单例对象。虽然您可以将其视为一个单例对象,但它仍然是一个“特殊对象”,它封装了一个类型的所有静态成员。引用对象的范围是否困难?您甚至不需要中间值
MyObject.asInstanceOf[…]
编译并正常工作。我不知道scalanomad是从哪里得到这样的印象的:一个人不能在一个单身汉身上使用
来代替
。我只是想要一个
Any
,特别是不要有一个“void”
来代替
。但是你是对的,
MyObject.asInstanceOf[MyObject.type]
同样有效。
$ scala
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_39).
Type in expressions to have them evaluated.
Type :help for more information.

scala> case object MyObject
defined module MyObject

scala> val x: Any = MyObject
x: Any = MyObject

scala> x.asInstanceOf[MyObject.type]
res0: MyObject.type = MyObject