与外部类同名的内部类?

时间:2014-06-13 22:47:21

标签: java inner-classes

约束:

  

我有一个maven源代码生成器,我写的是创建POJO类   来自一些具有嵌套命名空间的数据文件。我想要每个命名空间   嵌套为内部类。在某些情况下,我无法控制自己   内部类与最外层的名称相同   类。

     

所有类都必须是public范围,因为这是针对类型安全的   包装类似属性文件的东西,但是分层...

     

我无法更改名称,否则我将更改名称含义和命名空间   这是封闭数据。

鉴于我有以下代码:

public class A
{
    public class B
    {
        public class A
        {

        }
    }
}

内部类应该附加外部类的名称以形成一个唯一的命名空间,例如A$B$A.class,我没有找到一个不能编译的正当理由。

是否有任何技巧可以让它进行编译?

3 个答案:

答案 0 :(得分:9)

没有。 From the JLS section on class declarations:

  

如果一个类与其任何封闭类或接口具有相同的简单名称,那么这是一个编译时错误。

注意:我在第一次通过寻找明确的规则时,设法错过了这个。如果你想要我这里曲折的方式,请查看编辑历史记录。

答案 1 :(得分:2)

这有点像黑客攻击,但这会在我的机器上编译:

class A
{
    public class B
    {
        public class Α
        {

        }
    }
}

Try it.直译:复制过去这件事;)

SPOILER:

  

内部类的名称是希腊字母表的大写字母。这是一个Unicode字符。

答案 2 :(得分:0)

根据您之后的情况,以下内容可能对您有用:

public class A {
  class B extends C {
  }

  public static void main(String[] args) {
    new A().new B().new A();
  }
}

class C {
  class A {
    {
      System.out.println(getClass());
    }
  }
}
相关问题