W Javie mogę uzyskać dostęp do publicznego elementu klasy, używając .
, co można zobaczyć w drugim wierszu głównej metody w poniższym przykładzie (dla tego przykładu zignoruj moje słabe użycie enkapsulacji).Czy "." dla dostępu członka uważany za operatora w Javie?
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;
}
}
Czy .
traktowany jako operator w języku programowania Java, tak jak *
, ~
i !=
są uważane operatorom?
Edit - Rozszerzenie powyższego przykładu:
Jak już wspomniano, wydaje się, że specyfikacja języka Java uważa .
być separator a nie operator. Chciałbym jednak zwrócić uwagę, że .
wykazuje pewne zachowanie, które wydaje się raczej operatorem. Rozważ powyższy przykład przedłużony do:
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;
}
}
Oczywiste jest, że niektóre pierwszeństwo jest egzekwowane tak, że dostęp członkiem jest oceniany przed dodaniem. Wydaje się to intuicyjne, ponieważ jeśli dodawanie miało być najpierw ocenione, wtedy mielibyśmy p.2
, co jest nonsensem. Niemniej jednak jest oczywiste, że .
wykazuje zachowanie, którego nie posiadają inne separatory.
Rozważ pominięcie tej "składni". To jest zła praktyka w świecie java, super w drugiej strony jest w porządku, gdy rozszerzasz klasy. – Tom
@ Tom Jeśli pozbyłem się zastosowań tego "w moim przykładzie", wówczas moje pola publiczne nie zostałyby utworzone i miałbym błąd w czasie wykonywania. Ponadto nie jest to szczególnie relavent na moje pytanie. – jbranchaud
@Tom Twoja opinia może, ale nie jest to ogólna zasada. Osobiście uważam, że użycie tego w setterach i konstruktorach jest o wiele lepsze od wymyślania nowych nazw parametrów, dzięki czemu mogę je odróżnić od pól. – Voo