使用isInstanceOf
方法,可以检查对象的类型。例如:
scala> val i: Int = 5
i: Int = 5
scala> val a: Any = i
a: Any = 5
scala> a.isInstanceOf[Any]
res0: Boolean = true
scala> a.isInstanceOf[Int]
res1: Boolean = true
scala> a.isInstanceOf[String]
res2: Boolean = false
如何显示所有类型的对象(如果可能的话?)?
答案 0 :(得分:6)
您可以在2.10(M4或更高版本)中轻松完成此操作:
import scala.reflect.runtime.universe._
def superTypes(t: Type): Set[Type] =
(t.parents ++ t.parents.flatMap(superTypes)).toSet
def allTypes[A](a: A)(implicit tag: TypeTag[A]) = superTypes(tag.tpe) + tag.tpe
这给了我们以下内容:
scala> allTypes(1).foreach(println)
AnyVal
Any
NotNull
Int
scala> allTypes("1").foreach(println)
String
Any
Object
Comparable[String]
CharSequence
java.io.Serializable
scala> allTypes(List("1")).foreach(println)
scala.collection.LinearSeq[String]
scala.collection.GenSeq[String]
scala.collection.IterableLike[String,List[String]]
scala.collection.GenIterable[String]
scala.collection.GenTraversableLike[String,Iterable[String]]
...
在2.10之前尝试做任何事情都会困难得多。
答案 1 :(得分:1)
这是另一个解决方案,它使用baseType
方法来重新定义类型参数。
import scala.reflect.runtime.universe._
def typesOf[T : TypeTag](v: T): List[Type] =
typeOf[T].baseClasses.map(typeOf[T].baseType)
示例:
scala> typesOf("1") foreach println
String
CharSequence
Comparable[String]
java.io.Serializable
Object
Any