0
я хочу, чтобы создать какой-то код, как показано ниже:Как сузить анонимный класс?
AbstractSomeClass<?> someClassObj = new AbstractSomeClass<MyConcreteType> {
...
}
Я попытался следующие:
JDefinedClass anonymousSomeClass = codeModel.anonymousClass(AbstractSomeClass.class);
...
conditionalBody.decl(anonymousSomeClass, "someClassObj", JExpr._new(anonymousSomeClass.narrow(jClass)));
Got исключение ниже, вызванное «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
Что вы подразумеваете под дублированным импортом? Я вижу один импорт, но на один объект AbstractSomeClass ссылается полное имя пакета. Конечно, Codemodel не известен для создания самых красивых результатов. –
Привет jonhcarl. Благодарю. В моих сгенерированных исходных файлах есть несколько «import test.Tester.AbstractSomeClass». Я думаю, вы используете его только в одном месте. Я использовал anonymousClass в нескольких местах с различными узкими типами. Но это не имеет значения, поскольку в любом случае это не дает никаких синтаксических ошибок, просто дублирует импорт. Спасибо за вашу помощь. – Cheng