20

我有两个对象,ObjectA 和 ObjectB,它们都有一个方法 update()。我想编写一个接受 ObjectA 或 ObjectB (但不接受其他类型)的函数。从概念上讲,这就是我想要做的:

def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
    obj.update
}

我意识到还有其他方法可以解决这个问题(例如,update() 方法的结构类型、公共基类等),但我的问题是在 Scala 中可以这样做,如果可以,语法是什么?这叫什么?

4

1 回答 1

20

在 Scala 中,有类型 Either 可以建立不相交的联合。基本上,您将执行以下操作:

def doSomething(obj: Either[ObjectA, ObjectB]) {
  obj.fold(fa, fb)
}

结帐http://www.scala-lang.org/api/current/scala/Either.html

于 2012-03-08T00:12:01.017 回答