¿un rasgo sellado es lo mismo que una clase sellada?
En cuanto a sealed
va, sí. Comparten las diferencias normales entre trait
y class
, por supuesto.
O, en caso negativo, ¿cuáles son las diferencias?
Moot.
¿Cuándo es una buena idea usar un rasgo sellado (y cuándo no)?
Si usted tiene un sealed class X
, entonces usted tiene que comprobar si hay X
, así como cualquier subclase. Lo mismo no ocurre con sealed abstract class X
o sealed trait X
. Entonces podría hacer sealed abstract class X
, pero eso es mucho más detallado que solo trait
y para poca ventaja.
La principal ventaja de usar un abstract class
en un trait
es que puede recibir parámetros. Esa ventaja es particularmente relevante cuando se usan clases de tipo. Digamos que quieres construir un árbol ordenado, por ejemplo.Puede escribir lo siguiente:
sealed abstract class Tree[T : Ordering]
pero no se puede hacer esto:
sealed trait Tree[T : Ordering]
desde los límites de contexto (y ver los límites) se implementan con los parámetros implícitos. Dado que los rasgos no pueden recibir parámetros, no puedes hacer eso.
Personalmente, prefiero sealed trait
y lo uso a menos que algún motivo en particular me haga usar un sealed abstract class
. Y no estoy hablando de razones sutiles, sino de razones que no puedes ignorar, como usar clases de tipos.
Gracias. ¿Con "todas sus subclases" significa clases y rasgos? –
Downvoted ¿por qué? –
@John - No lo he intentado, pero sospecho que hay clases. El punto sobre el sellado es que todo se define dentro de esa unidad fuente –