我有一个maven源代码生成器,我写的是创建POJO类 来自一些具有嵌套命名空间的数据文件。我想要每个命名空间 嵌套为内部类。在某些情况下,我无法控制自己 内部类与最外层的名称相同 类。
所有类都必须是
public
范围,因为这是针对类型安全的 包装类似属性文件的东西,但是分层...我无法更改名称,否则我将更改名称含义和命名空间 这是封闭数据。
public class A
{
public class B
{
public class A
{
}
}
}
内部类应该附加外部类的名称以形成一个唯一的命名空间,例如A$B$A.class
,我没有找到一个不能编译的正当理由。
是否有任何技巧可以让它进行编译?
答案 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());
}
}
}