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