aceitar vários tipos para um parâmetro em scala
-
09-12-2019 - |
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?
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