Mam dwa obiekty, ObjectA i ObjectB, oba z aktualizacją metody(). Chcę napisać funkcję, która akceptuje ObjectA lub ObjectB (ale nie ma innych typów). Koncepcyjnie, to jest to, co próbuję zrobić:akceptuje wiele typów dla parametru w scala
def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
obj.update
}
ja sobie sprawę, że istnieją inne sposoby rozwiązania tego problemu (np typowania strukturalne metody update(), wspólne klasę bazową, etc), ale moje pytanie brzmi: można to zrobić w ten sposób w Scali, a jeśli tak, to jaka jest składnia? I jak to się nazywa?
Jak można się spodziewać to zadziałało? W jaki sposób kompilator wiedziałby, jakie metody miał "T", gdyby nie wiedział, jaki to był typ? Jeśli chcesz upewnić się, że twoja klasa ma "aktualizację", to właśnie do tego służą typy strukturalne. – dhg
możliwy duplikat [Czy Scala ma "typ disjunction" (typy związków)?] (Http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types). Zarówno przyjęta odpowiedź, jak i kolejna wysoko oceniona, odnoszące się do mojego kodowania unboxed union, bezpośrednio rozwiązują to pytanie. –
@dhg, jeśli zarówno ObjectA, jak i ObjectB posiadają aktualizację metody(), a typ T rozszerza jedną lub drugą z tych klas, może wiedzieć, że typ T ma metodę update(). –