Pergunta

Eu tenho dois objetos, ObjectA e ObjectB, ambos com um método update().Quero escrever uma função que aceite ObjectA ou ObjectB (mas nenhum outro tipo).Conceitualmente, é isso que estou tentando fazer:

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

Sei que existem outras maneiras de resolver esse problema (por exemplo, digitação estrutural do método update(), classe base comum, etc.), mas minha dúvida é: é possível fazer isso dessa maneira no Scala e, em caso afirmativo, qual é a sintaxe?E como isso é chamado?

Foi útil?

Solução

No Scala existe o tipo Both para fazer uma união disjunta.Basicamente, você fará algo como:

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top