我能够检查对象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, ...))
答案 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