具有嵌入式枚举的类的代码模型导入

时间:2015-08-04 12:15:35

标签: java jcodemodel

我正在使用CodeModel生成一些Java类,我在为嵌入了静态枚举的类添加import语句时遇到了一些麻烦

例如,如果我有一个类并创建一个实例变量......

Class<?> clazz = getPackageClass();
cls.field(JMod.PRIVATE, codeModel._ref(sourceClass), "testUnderlying");

但这会创建像......这样的代码。

import com.test.platform.xxx.UnderlyingType;
....
private UnderlyingType testUnderlying;

但是,如果UnderlyingType有一个我想调用静态方法的枚举字段(例如valueOf)......

private UnderlyingType.EnumType enum;
...
...
UnderlyingType.EnumType.valueOf(xxx);

它似乎混淆了CodeModel而不是单独导入和实例变量我将得到

private com.test.platform.xxx.UnderlyingType testUnderlying;

是否可以在不丢失导入的情况下调用静态方法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

JCodeModel代码中有一条注释提到它们不导入内部类的原因:

    /**
     * Returns true if the symbol represented by the short name
     * is "importable".
     */
    public boolean collisions(JDefinedClass enclosingClass) {
        // special case where a generated type collides with a type in package java
        ...
        if(c.outer()!=null)
            return true; // avoid importing inner class to work around 6431987. Also see jaxb issue 166
        }
    ...
    }

不确定6431987指的是什么(可能是内部SUN错误跟踪器),但这里是引用的jaxb问题:

https://java.net/jira/si/jira.issueviews:issue-html/JAXB-166/JAXB-166.html

似乎他们遇到了从内部类别进口冲突的麻烦。

值得注意的是,这个JCodeModel分支修复了这个问题:https://github.com/UnquietCode/JCodeModel