いくつかの単純なジオメトリを表す Java クラスを作成しています。
最上位のabstract
クラス (それ自体がpackage-private ) で、同じパッケージ内のサブクラスからアクセスする必要がある属性を宣言しました。
のように属性を宣言するfinal
とAbstractClass
、
final int foo;
getter メソッドに煩わされることなく、パッケージ内で直接アクセスできます。でも。「実践」(または私が一般的なスタイルであると信じているもの)に従って行うと、次のようになります。
private final int foo;
もちろん、これには非private
ゲッターが必要です。サブクラスはfoo
、外部オブジェクトであるかのように (非常に関連性の高い典型的な属性である) を参照する必要があります。
this.getFoo();
コードを追加し、これらのメンバーに直接アクセスする方法 (つまりfoo
) を削除します。
private
とにかく最終的なものであり、これらの属性をパッケージ内で内部的に公開することを心配していないため、修飾子をスキップすることの欠点はありますか?
ゲッター/セッターは、オブジェクトが独自の属性にアクセスするための非常に自然な方法であると主張する OO 支持者を知っていますが、これはいつ、非化粧的で非 [JavaBeans スタイルのものを挿入] するのでしょうか?
内部クラス を考えてみましょう。これは、2 つの属性Coordinate
があるため非常に単純です。使用方法はすべて class に残します。int
OuterClass
class OuterClass{
final static class Coordinate{
final int x, y;
Coordinate(int x, int y){
this.x = x;
this.y = y;
}
}
Coordinate coordinate;
}
この内部クラスの場合、getter を作成するという慣習を気にする必要があるのはなぜですか? ゲッターはより多くのコードを導入し、同じパッケージ内のすべてのクラスcoordinate.getX();
を単純に呼び出す代わりに強制的に呼び出しますcoordinate.x;
。ここにオーバーヘッドはありますか?final
class の修飾子に注意してくださいCoordinate
。