07/07/16 05:08:20
C++からJavaに引っ越してきたばかりの初心者です。
class A {
private int data; //外部からは見えない
private setter(int data) { this.data = data; } //外部からは使えない
public int getter() { return data; }
}
というクラスがあったとき、data は int 型なので、この値が外部からは
絶対に変更されないことは保証されていると思います(C++と同じ)。
しかし、これが基本型の int ではなく、一般的なクラスだった場合、
例えば StringBuffer だったりしたら、外部からでも
StringBuffer str = getter();
str.append("hoge");
みたいにして操作することは可能です(ここはC++と違う)。
これを防ぐために思いつくのは、getter() で data そのものではなく
data のコピーを返すことですが、
public String getter() { return data.toString(); }
1. これは標準的な方法ですか?
2. ざっと見たところ、StringBuffer と違って String には
インスタンスそのものが保持している値を直接書き換える
関数はないようですが、int と同じように扱っても安全ですか?
3. StringBuffer.clone() って使えるのが自然なような気がするんですが、
なんで使えないんですか?