2015-08-21 4 views
2

Есть ли способ сделать asInstanceOf на скале object. Несмотря на то, что это синглтон, он по-прежнему является экземпляром. Так почему я не могу сделать asInstanceOf на этом синглетоне?Почему я не могу вызвать asInstanceOf для объекта в Scala?

Say:

case object MyObject 
+0

Ну ... причина в том, что из-за его не просто единственный объект. Хотя вы можете думать о нем как о одиночном объекте, он по-прежнему является «специальным объектом», который обертывает все статические члены типа. –

+0

Является ли трудностью область (области) при обращении к объекту? – elm

ответ

3

Вы можете, на самом деле:

$ 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 
+1

Вам даже не требуется промежуточное значение. 'MyObject.asInstanceOf [...]' компилируется и работает как следует. Я понятия не имею, где скаланомад создавал впечатление, что нельзя использовать 'asInstanceOf' в одноэлементном режиме. –

+0

Абсолютно. Я просто хотел, чтобы «Any» специально не имел «void» 'asInstanceOf'. Но вы правы, 'MyObject.asInstanceOf [MyObject.type]' так же справедлив. – sjrd

0

По определению одноэлементного (а именно объект Скала) имеет один единственный экземпляр, обозначенное имя, используемое в объявлении объекта.

Также обратите внимание, что в классе вы можете обратиться к типу самого именем класса,

case class B() 
val b = B() 

b.isInstanceOf[B] 
res: Boolean = true 

Однако case object оказывается один экземпляр; для обозначения его типа считают

case object A 

A.isInstanceOf[A.type] 
res: Boolean = true 
Смежные вопросы