Dire che ho un'interfaccia Interface
, che contiene solo getter per vari campi. Questa interfaccia ha implementazioni multiple (diciamo Foo
e Bar
), ognuna delle quali aggiunge vari campi. Tutte queste implementazioni sono immutabili.
Supponiamo di avere un'istanza interface
di Interface
e voglio creare una copia di questa istanza che modifichi uno dei campi esposti da Interface
. Come posso ottenere questo risultato senza lanciare interface
su un sottotipo? Non riesco a utilizzare una classe Builder per Interface
perché si tratta di un'interfaccia astratta.
Credo che questo problema sia un problema di OOP abbastanza generico, ma qui è come apparirebbe il codice Java per esso:
public interface Interface {
public int getVersion();
}
public class Foo implements Interface {
private final int version;
private final String owner;
public Foo(int version, String owner) {
this.version = version;
this.owner = owner;
}
public int getVersion() {
return version;
}
public String getOwner() {
return owner;
}
public String toString() {
StringBuilder builder = new StringBuilder(owner);
builder.append(" v");
builder.append(version);
return builder.toString();
}
}
public Bar implements Interface {
// similar to Foo
}
e la situazione in cui voglio copiare un'istanza esistente:
Interface instance = new Foo(1, "some value");
assertEquals("some value v1", instance.toString());
Parent copy = // create the copy based on instance but updating the version to 2
assertEquals("some value v2", copy.toString());