isInstanceOf用于多种可能性

时间:2013-12-05 14:32:44

标签: scala types

我能够检查对象o是否是A或B的实例:

o.isInstanceOf[A] || o.isInstanceOf[B]

但如果我有更多的可能性,这会变得很难看。

有没有办法定义这样的东西:

o.isInstanceOf[A,B,C,D, ...]

o.isInstanceOf(A,B,C,D, ...)

o.isInstanceOf(Set(A,B,C,D, ...))

2 个答案:

答案 0 :(得分:4)

sealed trait Super
class A extends Super
class B extends Super
class C extends Super
class D extends Super

val unknown: Super = new C
unknown match { case _: A | _: B | _: C => "I'm a super, but not D" } 
// I'm a super, but not D

答案 1 :(得分:0)

我试过的东西,但是很难。

def isInstance(o : Any, s : Set[Class[_]]) = s.exists(o.getClass == _)

println(isInstance(Nil, Set(Int.getClass, List.getClass))) //false
println(Nil.isInstanceOf[List[_]]) //true

println(isInstance(3, Set(Int.getClass, List.getClass))) //false
println(3.isInstanceOf[Int]) //true