Zastanawialem sie nad czyms takim: mam sobie taka bzdurna klase:
class Klasa {
private StringBuilder sb = new StringBuilder(17);
public StringBuilder getSB() {
return sb;
}
}
Pole sb jest
private
zgodnie z zasadami OOP. Jednak moge sie do niego dostac za pomoca metody getSB. I nad tym sie zastanawialem: przeciez w ten sposob nie ochronilem pola sb poniewaz zwracana wartosc do referencja do dokladnie tego obiektu - moge wiec dowolnie nim manipulowac. Problem dotyczy tylko obiektow ktore mozna zmieniac (mutable), poniewaz np. String lub wrappery nie moga byc zmienione. I co z tym zrobic? Myslelem ze moze powinienem zrobic cos takiego:
public StringBuilder getSB() {
return sb.clone();
}
Ale to nie rozwiazuje problemu poniewaz dana klasa moze nie implementowac interfejsu Cloneable. Co nalezy zrobic w takiej sytuacji? I czy to oc pisze ma w ogole jakis sens?