インターフェイスがゲッターとセッターを定義できない理由がわかりません。たとえば、List.size()
実質的にゲッターです。ただし、インターフェースは実装ではなく動作を定義する必要があります。状態をどのように処理するかはわかりませんが、状態を取得して設定できると主張することはできます。
たとえば、コレクション インターフェイスはすべて状態に関するものですが、異なるコレクションはその状態を根本的に異なる方法で格納できます。
編集: コメントは、ゲッターとセッターがバッキング ストレージに単純なフィールドが使用されていることを暗示していることを示唆しています。私はこの含意に激しく同意しません。私の考えでは、値を取得/設定するのは「かなり安い」という意味がありますが、単純な実装でフィールドとして格納されているわけではありません。
編集: コメントに記載されているように、これはJavaBeans 仕様セクション 7.1で明示されています。
したがって、スクリプト作成者b.Label = foo
がプロパティを設定するためのターゲット オブジェクトへのメソッド呼び出しなどがある場合でも、ターゲット オブジェクトは完全なプログラム制御を持っています。
そのため、プロパティは単純なデータ フィールドである必要はなく、実際には計算された値にすることができます。更新プログラムには、さまざまなプログラムの副作用がある場合があります。たとえば、Bean の背景色のプロパティを変更すると、Bean が新しい色で再描画される可能性もあります。」
想定される意味が正しい場合、プロパティをフィールドとして直接公開することもできます。幸いなことに、その意味は当てはまりません。getter と setter は、物事を計算する権利の範囲内に完全に収まっています。
たとえば、次のコンポーネントを考えてみましょう。
getWidth()
getHeight()
getSize()
そこに 3 つの変数があるという意味があると思いますか? 次のいずれかを持つことは合理的ではないでしょうか。
private int width;
private int height;
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public Size getSize() {
return new Size(width, height); // Assuming an immutable Size type
}
または(できればIMO):
private Size size;
public int getWidth() {
return size.getWidth();
}
public int getHeight() {
return size.getHeight();
}
public Size getSize() {
return size;
}
ここで、サイズ プロパティまたは高さ/幅プロパティのいずれかは便宜上のものですが、それによってそれらが無効になることはありません。