2

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

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

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;

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

谢谢你的帮助!

4

1 回答 1

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

于 2015-09-04T22:44:36.010 回答