0
我要生成象下面这样一些代码:如何缩小匿名类?
AbstractSomeClass<?> someClassObj = new AbstractSomeClass<MyConcreteType> {
...
}
我试过如下:下面
JDefinedClass anonymousSomeClass = codeModel.anonymousClass(AbstractSomeClass.class);
...
conditionalBody.decl(anonymousSomeClass, "someClassObj", JExpr._new(anonymousSomeClass.narrow(jClass)));
了异常,造成“anonymousSomeClass.narrow(JCLASS)”。如果我删除'.narrow(jClass)',一切都很好。
java.lang.NullPointerException
at com.sun.codemodel.JDefinedClass.outer(JDefinedClass.java:776)
at com.sun.codemodel.JFormatter.t(JFormatter.java:280)
at com.sun.codemodel.JNarrowedClass.generate(JNarrowedClass.java:143)
at com.sun.codemodel.JFormatter.g(JFormatter.java:350)
at com.sun.codemodel.JInvocation.generate(JInvocation.java:173)
at com.sun.codemodel.JFormatter.g(JFormatter.java:350)
at com.sun.codemodel.JVar.bind(JVar.java:212)
at com.sun.codemodel.JFormatter.b(JFormatter.java:396)
at com.sun.codemodel.JVar.declare(JVar.java:216)
...
谢谢。
非常感谢。它会产生一个正确的结果,但结果源代码包含AbstractSomeClass的多个重复导入。正如你所说,我认为这可能是CodeModel的一个错误。 – Cheng 2014-10-08 05:38:16
重复进口是什么意思?我看到一个导入,但是一个AbstractSomeClass被全包名称引用。当然,Codemodel并不知道生成最漂亮的结果。 – 2014-10-08 13:59:40
嗨jonhcarl。谢谢。在我生成的源文件中有多个'import test.Tester.AbstractSomeClass'。我想你只能在一个地方使用它。我在不同狭窄类型的几个地方使用了anonymousClass。但这并不重要,因为无论如何都不会产生任何语法错误,只是重复导入。谢谢你的帮助。 – Cheng 2014-10-09 01:05:11