0

ドット表記を使用してゲッターを呼び出す objC に慣れているため、メソッドが get で始まる場合、必ずしもインスタンス変数と関係があるとは限りません。

Java では、getter でないときに「get」で始まるメソッドを記述するのは悪い習慣でしょうか?

4

5 に答える 5

3

get単純な目的よりも大きな目的を果たすメソッドにプレフィックスを使用するgetterと、誤解を招く可能性があります。メソッドは、呼び出し元が予期しない意図しない結果をもたらす可能性があるためです。

追加機能を抽出して、その意図を表す名前の新しいメソッドにすることをお勧めします。

于 2013-08-09T17:51:27.257 に答える
2

そうすれば世界が終わるわけではありませんが、5 年後にあなたのコードを見ようとしている人から考えてみてください。個人的には、実際にはゲッターではないメソッドには get を使用しません。必要に応じて fetch を使用できます。しかし、単なる個人的な好みです。

このブログを見てください。

http://blog.joda.org/2011/08/common-java-method-names.html

于 2013-08-09T17:52:47.867 に答える
2

getter の名前はgetJavaBeans の規則に従って で始まるget必要がありますが、で始まるすべての名前が「ダム」ゲッター、つまり単純な変数によってサポートされるものを表す必要はありません。メソッドが何かを取得する場合、オブジェクトに関連付けられている計算されたものであっても、で始まる名前を付けるのgetは完全に適切です。

変数に基づくプロパティを表さない「get」メソッドの例を次に示します。

public class Person {
    private Date dob;
    // DOB is a "classic" property
    public Date getDob() {
        return dob;
    }
    public void setDob(Date dob) {
        this.dob = dob;
    }
    // Although ageInYears is a calculated property,
    // a name that starts in "get" is appropriate for it.
    int getAgeInYears() {
        Calendar now = Calendar.getInstance(Locale.US);
        now.setTime(new Date());
        Calendar old = Calendar.getInstance(Locale.US);
        old.setTime(dob);
        int diff = now.get(YEAR) - old.get(YEAR);
        if (old.get(MONTH) > now.get(MONTH) || 
        (old.get(MONTH) == now.get(MONTH) && old.get(DATE) > now.get(DATE))) {
            diff--;
        }
        return diff;
    }
}
于 2013-08-09T17:53:55.560 に答える
1

コードを混乱させたり、誤解を招くような名前をメソッドに付けたりしない限り、それは実際にどのように使用するかに依存します。

于 2013-08-09T17:51:00.253 に答える
0

答えはイエスだと思います。Java のほとんどのプログラマーは、プライベート フィールドの値を返すメソッドとしての getter に慣れています。

「get」はメソッド名としては非常に一般的であるため、意図 (「なぜ」という質問) またはアルゴリズム (「どのように」という質問) について何かを伝える、より正確な名前を優先してください。sortNames(...) または applyQuicksort(...) は getPhoneBook() よりも優れています。また、findNumberForName(...) は getNumber(...) よりも優れています。「検索」は、O(log(n)) または O(n) の複雑さがあるが、getter では通常の O(1) ではないことを示します。

場合によっては、名前を非常に一般的なものにする必要がある場合や、保持したい場合があります。混乱を避けるために、私は常に「get」の代わりに「provide」を使用します。

于 2013-08-09T18:19:51.340 に答える