tengo una clase a lo largo de las líneas demanera apropiada a la subclase de guayaba ImmutableSet
class Receipt
{
private Set<Order> orders;
public Receipt(Set<Order> orders)
{
this.orders = ImmutableSet.copyOf(orders)
}
}
Esto me ha servido bien.
Sin embargo, debido a algunos problemas de tipo de borrado & de persistencia que estoy enfrentando, me gustaría presentar ahora una forma de
class OrderSet extends Set<Order> {}
Obviamente no puedo extender Set<Order>
, ya que es una interfaz. Me gustaría mantener mi implementación como inmutable. Sin embargo, no puedo extender ImmutableSet<Order>
, como el estado docs:
Nota: A pesar de esta clase no es definitiva, no puede tener subclases fuera de su paquete ya que no tiene constructores públicos o protegidos. Por lo tanto, se garantiza que las instancias de este tipo son inmutables.
que podría utilizar la composición, dando OrderSet
una colección respaldo de ImmutableSet
y delegar todos los Set
métodos a la misma. Sin embargo, esto parece excesivo.
¿Hay alguna otra forma en que pueda lograr una subclase no genérica aquí?
Además, recuerde hacer que su IDE escriba los métodos de delegación para usted. En eclipse, Source-Generate Delegated Method –
Esto es _exactly_ para lo que 'ForwardingSet' y sus amigos son para. –
Además, @PabloGrisafi, tu comentario es incorrecto. Debería sobrescribir 'ForwardingSet.delegate()' y no anular ningún método cuyo comportamiento no se modifique. –