принимать несколько типов для параметра в Scala - PullRequest
15 голосов
/ 08 марта 2012

У меня есть два объекта, ObjectA и ObjectB, оба с методом update (). Я хочу написать функцию, которая принимает либо ObjectA или ObjectB (но не другие типы). Концептуально это то, что я пытаюсь сделать:

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

Я понимаю, что есть другие способы решения этой проблемы (например, структурная типизация метода update (), общий базовый класс и т. Д.), Но мой вопрос: возможно ли сделать это таким образом в Scala, и если да, то что синтаксис? И как это называется?

1 Ответ

16 голосов
/ 08 марта 2012

В Scala есть тип Either для создания непересекающегося союза.В основном вы будете делать что-то вроде:

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

Оформить заказ http://www.scala -lang.org / api / current / scala / Either.html

...