0
Я использую классы кода солнца (2.4.1) для генерации кода. Как передать класс в JInvocation.arg? Код, который я пытаюсь создать это:Sun CodeModel с использованием класса с JInvocation.arg
JAXBContext jc;
jc = JAXBContext.newInstance(NaturalLanguageUsage.class);
код Я бегу это:
JClass importJAXBContext = codeModel.directClass(javax.xml.bind.JAXBContext.class.toString());
JType typeJAXBContext = codeModel._ref(javax.xml.bind.JAXBContext.class);
JVar varJc = block.decl(typeJAXBContext, "jc");
JInvocation invokeJAXBContext = block.staticInvoke(importJAXBContext, "newInstance");
invokeJAXBContext.arg(??); // how do I pass NaturalLanguageUsage.class
То, что я хотел бы произвести:
JAXBContext jc;
jc = JAXBContext.newInstance(NaturalLanguageUsage.class);
или даже лучше:
JAXBContext jc = JAXBContext.newInstance(NaturalLanguageUsage.class);
Я получаю 1 ошибку, когда я использую это точно так, как представлено. Первая строка codeModel.ref хочет, чтобы String не был классом, поэтому у меня есть toString(), как в моем Вопросе. Я принимаю ваш ответ, хотя бы вы знали, как я могу сделать объявление и назначение на одной линии против двух? – EGHM
Это странно, потому что вы должны использовать метод ref, который принимает класс arg - см. [This] (https://codemodel.java.net/nonav/apidocs/com/sun/codemodel/JCodeModel.html#ref% 28java.lang.Class% 29). Какую версию codemodel вы используете? В классе JBlock существует перегруженный метод 'decl', который принимает JExpression в качестве третьего аргумента, что позволяет выполнять декларирование и инициализацию в одной строке. – ddms
Использование версии 2.4.1 sun.codemodel. В предыдущем комментарии я сказал, toString(), но getName() лучше, поскольку он удерживает класс или интерфейс от импорта. Я думаю, что есть проблема с этим URL. – EGHM