Diciamo che ho una classe Foo in Java che dispone di dati immutabili:Java: metodo pseudo-setter per le classi immutabili
class Foo {
final private int x;
public int getX() { return this.x; }
final private OtherStuff otherstuff;
public Foo(int x, OtherStuff otherstuff) {
this.x = x;
this.otherstuff = otherstuff;
}
// lots of other stuff...
}
Ora mi piacerebbe aggiungere un metodo di utilità che crea un valore "fratello" con lo stato identico ma con un nuovo valore di x. Potrei chiamo setX()
:
class Foo
{
...
Foo setX(int newX) { return new Foo(newX, this.otherstuff); }
...
}
ma la semantica di setX()
sono diversi rispetto alla convenzione standard setter per gli oggetti di fagioli mutabili, quindi in qualche modo questo non mi sembra giusto.
Qual è il nome migliore per questo metodo?
Devo chiamarlo withX()
o newX()
o qualcos'altro?
edit: nuova priorità nel mio caso: ho clienti di scripting (tramite JSR-223 e un modello a oggetti esporto) che può facilmente ottenere un oggetto Foo
. È tuttavia ingombrante chiamare costruttori o creare costruttori o altro. Quindi è auspicabile che fornisca questo metodo come vantaggio per i client di scripting.
Una questione collegata: http://stackoverflow.com/questions/521893/whats-the-best-name-for-a-non-mutating-add-method-on- un-immutabili-raccolta. (È lo stesso di questo, ma per 'add' invece di' setX'.) – ruakh