アプリ版:「スタンプのみでお礼する」機能のリリースについて

getterとsetterがあり、privateなインスタンス変数を持つクラスと、publicなインスタンス変数を持つクラスってどう違うんですか?

A 回答 (2件)

class Sample1 {


public String s;
}

class Sample2 {
private String s;
public void setS(String s) {
this.s = s;
}
public String getS() {
return this.s;
}
}

こういうシンプルな実装を比べるなら
どっちも同じ意味であり、違いはないわ。

じゃあ、何故getterやsetterを用意するのか、
と言うことになるわね。

そもそも初期のJavaはフィールド(インスタンス変数)はSample1が当たり前だったわ。
実装も楽だしね。
でも、これを覆す概念が出現したの。そいつは「JavaBeans」よ。
JSPからの利用を前提にしているため、インターフェースの統一として
get~、set~(~がJSPに記述する部分)、つまりアクセサが仕様として確立したわ。

直接フィールドにアクセスする仕様にしなかったのは利便性のためよ。

例えはDate型で日付を保持しているフィールドtodayがあるとする。
もし、直接フィールドにアクセスすると、利用者は
Date型でtodayを取得し、必要に応じて変換することになるわ。
もし、その変換が常に必要ならば
getDate内部で変換してから渡してあげたほうが効率いいわね。
setも同様。
Stringのフィールドにnullが渡されたときに""にするとか
そういうこともできるわ。

長くなったけど簡単に言うと
いろいろ便利だから
ね。
主に拡張性や保守性的な意味で。
    • good
    • 0

setter があれば「おかしな値」を排除できる.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!