接受scala中参数的多个类型

时间:2012-03-07 23:54:33

标签: scala types structural-typing

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

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

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

1 个答案:

答案 0 :(得分:16)

在Scala中,有一种类型可以使一个不相交的联合。 基本上,你会做类似的事情:

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

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