2012-05-02 17 views
5

Biorąc pod uwagę następujący program:Java nazw globalny dostęp

class A { 
    static int java = 42; 
    static int System = -1; 

    public static void main(String[] args) { 
     java.lang.System.out.println("Foo"); 
    } 
} 

Kompilacja ta daje mi błąd mówiąc, że „nie może być int dereferencjonowane”. Powód jest oczywisty, ale jak należy radzić sobie z takimi sytuacjami. Jest to szczególnie istotne w scenariuszach generowania kodu, w których nie można wiedzieć, jaki kod użytkownika jest przeplatany z wygenerowanym kodem.

W języku C# po prostu użyłbym specyfikatora przestrzeni nazw "global ::" przed "java.lang", ale co robisz w Javie?

+0

To coś, o czym nigdy nie myślałem! – adarshr

Odpowiedz

3

Brak ogólnego rozwiązania w Javie. Sposób, w jaki żyjemy z tego jest

  1. poszanowanie konwencji nazewnictwa, które odróżniają nazwy klas z nazwami pakiet/pole i
  2. zakwalifikować statycznej var z nazwą klasy podczas generowania kodu.
+0

Jak to ma pomóc? Eyvind podąża za normalnymi konwencjami nazewnictwa w swoim przykładzie i nie ma znaczenia, czy pole jest statyczne, czy nie, wciąż ma pierwszeństwo przed dostępem do pakietu java. – jarnbjo

+0

Jak powiedziałem: "Brak ogólnego rozwiązania w Javie" :) –

+0

Właśnie, tego się obawiałem. Pragmatyzm, oto nadchodzę! – Eyvind