1

次のクラスがある場合..。

/**
 * Two dimensional cartesian point.
 */
public class Point {
  public final double x;
  private final double y;

  public double y(){
  return this.y;
  }

}

次のように値を取得できます。Point.xまたはPoint.y()オブジェクト指向言語では、データを直接アクセス可能にせず、代わりにアクセサーを使用してカプセル化することをお勧めしますが、フィールドアクセスを直接使用する方が通常のようです。と読み取り可能。

なぜJavaでは、パラメーターをとらない関数呼び出しの()をディスペンスできないのですか。

4

2 に答える 2

2

Javaは、1995年頃に言語設計が選択されたため、これを許可していません。Javaの目標は「ブルーカラー言語」でした。つまり、構成の総数は少なく、各構成は次のように明確である必要があります。可能。

ところで、「なぜJavaでパレンを落とさないのか」と自問する代わりに、「なぜJavaで冗長なゲッターとセッターをすべて作成するのか」と自問してみませんか。それに自動的に他のほとんどの言語。

ゲッター/セッターのポイントは、それほど多くのカプセル化ではなく(値を透過的に取得/設定するだけでは事実上何もありません)、動的ディスパッチです。アクセサは、他の方法と同様に、オーバーライドできます。また、一部のフレームワークは、直接のフィールドアクセスの代わりにそれらを使用することを主張しています。

public final double私にとって、フィールドを持つという選択は問題ありません。GridBagConstraintsJSEクラスのパブリックフィールドの例を見てください。

于 2012-05-16T10:45:38.130 に答える
0

あなたがそれについて考えるとき、コードは完全に読めなくなるでしょう。のようなものに遭遇したときfoo.bar、それがフィールドにアクセスしているのか、メソッドを呼び出しているのかわかりません。

これは、フィールドとメソッドに加えて、プロパティという3番目の種類の構成を導入した場合にのみ機能します。Javaがプロパティをサポートしている場合、プロパティなしでそれらにアクセスしても、()読みやすさを損なうことはありません。Javaにプロパティのような構造がない理由は技術的な理由はなく、単なる設計上の決定でした。

ただし、パラメータを指定せずにメソッド呼び出しで括弧を省略できるようにすることはお勧めできません。

于 2012-05-16T10:45:33.207 に答える