Java 全局命名空间访问

6

考虑下面这个程序:

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

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

编译时出现“int不能被引用”的错误。原因很明显,但应该如何处理这种情况呢?特别是在代码生成场景中,我们无法知道用户代码与生成代码的交织情况。
在C#中,我只需在“java.lang”之前使用“global::”命名空间说明符,但在Java中该怎么办呢?

这是我从未考虑过的事情! - adarshr
1个回答

2

Java中没有通用的解决方案。我们处理此问题的方法是:

  1. 遵守命名约定,将类名与包/字段名称区分开来,
  2. 在生成代码时,对静态变量使用其类名限定。

1
那有什么帮助呢?Eyvind在他的示例中遵循正常的命名约定,无论字段是否为静态,它仍然优先于访问java包。 - jarnbjo
就像我说的那样,“Java中没有通用解决方案” :) - Marko Topolnik
没错,这就是我担心的。现实主义,我来了! - Eyvind
公平地说,我从未遇到过一个现实生活中的问题会归结为这种名称空间冲突。 - Marko Topolnik
在这个上下文中,“int不能被解除引用”的原因是什么? - Quazi Irfan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接