接受scala中参数的多个类型

Jas*_*ler 16 types scala structural-typing

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

def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
    obj.update
}
Run Code Online (Sandbox Code Playgroud)

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

blo*_*rat 16

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

def doSomething(obj: Either[ObjectA, ObjectB]) {
  obj.fold(fa, fb)
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我不知道你的例子中的 fa 或 fb 来自哪里,也不知道你为什么在 obj 上调用 Fold() ,但 Either 似乎是最接近、最干净的方法。谢谢。 (2认同)