Może to być użyteczne dla:
- Opisując intencje programisty (stworzyłem B, ale jestem zainteresowany tylko zachowanie)
- Zapewnienie, że będzie stosować wyłącznie metody określone w Odp .: Pozwoli to na zamianę implementacji konkretnej w późniejszym czasie bez konieczności zmieniania znacznej części twojego kodu.
- Uproszczenie listy automatycznego uzupełniania dostępnego podczas korzystania z IDE lub REPL.
- Wymuszenie niejawnej konwersji w pewnym momencie.
Dla bardziej złożonych wystąpień, zapewnia to, że wnioskowany typ jest właściwy. Na przykład
sealed trait Answer
case object Yes extends Answer
case object No extends Answer
scala> val a = List(Yes, Yes, No)
a: List[Product with Serializable with Answer] = List(Yes, Yes, No)
scala> val b: List[Answer] = List(Yes, Yes, No)
b: List[Answer] = List(Yes, Yes, No)
powiedziałbym jest to tzw polimorfizmu – maxmc
@maxmc ale obiekt nadal będzie polimorficzny bez niego .. –
@maxmc Chcesz rozwinąć jak dokładnie to polimorfizmy: -? Podobnie jak pst I a także wierzę, że nie jest to dokładnie to, co rozumie się pod pojęciem polimorfizmu ... –