Scala 中是否可以对两种不相关的类型进行限制?例如,
trait A
trait B
def m(T <: A or B) ????
谢谢
如果您的A
andB
完全不相关(例如,没有您需要的常用方法,否则您可以只使用结构类型),这意味着当您将其用作方法参数时,您仍然需要它实际上是什么类型才能使用它们.
在这种情况下,Either[A, B]正是您所需要的。它表示一个对象必须是 A 或 B 之一,您可以在 Either 类中使用模式匹配或其他方法来检查它们。
例如:
class MyClassA {
def methodA() = println("I'm A")
}
class MyClassB {
def methodB() = println("I'm B")
}
def m(a: Either[MyClassA, MyClassB]) {
a match {
case Left(a) => a.methodA()
case Right(b) => b.methodB()
}
}
m(Left(new MyClassA)) // OK
m(Right(new MyClassB)) // OK
m(Left(new MyClassB)) // Failed, a Left must be a MyClassB instance
您可能对这篇文章感兴趣,它非常清楚地解释了 Either 是什么。