对于现有的JCodeModel API,没有预先构建的方法来处理这个问题。你可以,但是,定义自己的JStatement
类型生成通用的声明是这样的:
JDefinedClass definedClass = codeModel._class(JMod.PUBLIC, "org.test.Tester", ClassType.CLASS);
JMethod method = definedClass.method(JMod.PUBLIC, codeModel.VOID, "test");
final JType targetType = codeModel.ref(String.class);
final JVar clazzVar = method.body().decl(codeModel.ref(Class.class), "clazz", JExpr.invoke("getClass"));
method.body().add(new JStatement(){
@Override
public void state(JFormatter f) {
f.g(clazzVar).p(".<").g(targetType).p(">").p("get").p("();").nl();
}
});
产生:
package org.test;
public class Tester {
public void test() {
Class clazz = getClass();
clazz.<String >get();
}
}
这绝不意味着一个完整的解决方案(它缺少方法调用的参数为实例)。请参阅JInvocation
中的generate()
方法的实现以了解所需的详细信息。
这正是我需要的。谢谢,约翰! –