J'ai deux objets, ObjectA et ObjectB, les deux avec une méthode update(). Je veux écrire une fonction qui accepte ObjectA ou ObjectB (mais pas d'autres types). , C'est conceptuellement ce que je suis en train de faire:accepter plusieurs types pour un paramètre dans scala
def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
obj.update
}
Je sais qu'il ya d'autres façons de résoudre ce problème (par exemple, la saisie structurelle de la méthode mise à jour(), classe de base commune, etc.), mais ma question est il est possible de le faire de cette façon dans Scala et si oui, quelle est la syntaxe? Et comment s'appelle-t-il?
Comment pensez-vous que cela fonctionne? Comment le compilateur pouvait-il savoir quelles étaient les méthodes 'T' s'il ne savait pas de quel type il s'agissait? Si vous voulez vous assurer que votre classe a une «mise à jour», alors c'est ce que les types structurels sont pour. – dhg
duplication possible de [Est-ce que Scala a "type disjunction" (types d'union)?] (Http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types). A la fois la réponse acceptée et la suivante la plus haute référence renvoyant mon codage d'union sans boîte résout directement cette question. –
@dhg, si ObjectA et ObjectB ont une méthode update() et que le type T étend l'une ou l'autre de ces classes, il peut savoir que le type T a une méthode update(). –