Javaの場合、次の例のmainメソッドの2行目にあるように、.
を使用してクラスのパブリックメンバーにアクセスできます(この例では、私のカプセル化の貧弱な使用を無視します)。は 'です。 Javaのオペレータと見なされるメンバアクセスのための?
public class Test {
public static void main(String[] args) {
Position p = new Position(0,0);
int a = p.x; // example of member access
}
}
class Position {
public int x;
public int y;
public Position(int x, int y) {
this.x = x;
this.y = y;
}
}
は.
だけ*
、~
、および!=
として考えられている、Javaプログラミング言語の演算子と考える事業者ですか?
編集 - 上記の例の拡張:指摘されているよう
が、Java言語仕様が.
セパレータとしないオペレータであると考えているようです。しかし、私は、.
がオペレータのように見える動作をしていることを指摘したいと思います。以下に拡張上記の例を考える:
public class Test {
public static void main(String[] args) {
Position p = new Position(0,0);
int a = p . x; // a -> 0
int x = 1;
int b = p . x + x; // b -> 1
}
}
class Position {
public int x;
public int y;
public Position(int x, int y) {
this.x = x;
this.y = y;
}
}
いくつかの優先順位は、メンバアクセスを添加する前に評価されるように強制されていることは明らかです。これは直感的に思えます。なぜなら、加算を最初に評価するとしたら、p.2
がナンセンスになるからです。それにもかかわらず、.
は他のセパレータでは動作しないことが明らかです。
"this"構文を省いてください。それはあなたがクラスを拡張するときには、他の手でスーパーは大丈夫です、Javaの世界では悪い習慣です。 – Tom
@Tom私の例で 'this'の使用を取り除くと、私のパブリックフィールドはインスタンス化されず、実行時エラーが発生します。また、それは特に私の質問にrelaventされていません。 – jbranchaud
@Tomあなたの意見はおそらく、ほとんどの一般的なルールです。私は個人的には、これらのパラメータとフィールドを区別できるように、パラメータのいくつかの新しい名前を考案することよりはるかに優れたセッターとコンストラクタでこれを使用しています。 – Voo