Ho due oggetti, ObjectA e ObjectB, entrambi con un metodo update(). Voglio scrivere una funzione che accetta sia ObjectA o ObjectB (ma nessun altro tipo). Concettualmente, questo è quello che sto cercando di fare:accetta più tipi per un parametro in scala
def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
obj.update
}
Mi rendo conto che ci sono altri modi per risolvere questo problema (ad esempio, la tipizzazione strutturale del metodo update(), classe base comune, ecc), ma la mia domanda è è possibile farlo in questo modo in Scala e, in tal caso, qual è la sintassi? E come si chiama?
Come ci si aspetterebbe a questo lavoro? Come potrebbe il compilatore sapere quali metodi 'T' ha se non sapesse di che tipo fosse? Se intendi assicurarti che la tua classe abbia un 'update', allora è a questo che servono i tipi strutturali. – dhg
possibile duplicato di [Ha Scala tipo "disgiunzione" (tipi di unione)?] (Http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types). Sia la risposta accettata che il successivo riferimento più elevato che la mia codifica unione unboxed risolve direttamente questa domanda. –
@dhg, se sia ObjectA che ObjectB hanno un metodo update() e il tipo T estende l'una o l'altra di quelle classi, potrebbe sapere che il tipo T ha un metodo update(). –