2012-05-02 3 views
5

Учитывая следующую программу:Java глобальное пространство имен доступа

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

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

Компиляция это дает мне ошибку, говоря, что «INT не может быть разыменовываются». Причина очевидна, но как следует обращаться с подобными ситуациями. Это особенно актуально в сценариях генерации кода, где невозможно знать, какой код пользователя переплетается с сгенерированным кодом.

В C# я бы просто использовал спецификатор пространства имен «global ::» до «java.lang», но что вы делаете в Java?

+0

Это то, о чем я никогда не думал! – adarshr

ответ

3

Нет общего решения на Java. То, как мы живем с этим в

  1. уважение имен конвенций, которые отличают имена классов от имен пакетов/полей и
  2. квалифицироваться статический вар с именем класса при генерации кода.
+0

Как это должно помочь? Eyvind следует за стандартными соглашениями об именах в своем примере, и не имеет значения, является ли поле статическим или нет, оно все еще имеет приоритет перед доступом к пакету java. – jarnbjo

+0

Как я уже сказал, «Нет общего решения на Java» :) –

+0

Правильно, это было то, чего я боялся. Прагматизм, вот я! – Eyvind

Смежные вопросы