我正在使用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;
是否可以在不丢失导入的情况下调用静态方法?
感谢您的帮助!
答案 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