如何使用com.sun.codemodel
生成此java语句?
constructorArgs[constructorArgIndex] = null;
我尝试通过com.sun.codemodel.JArrayCompRef
使用component()
但是我得到了
尝试调用方法com.sun.codemodel.JArrayCompRef
assign()
不可见
由于com.sun.codemodel.JArrayCompRef
声明如下: -
final class JArrayCompRef extends JExpressionImpl
实现JAssignmentTarget
答案 0 :(得分:2)
.component()
可通过JExpression
界面获取。您需要做的就是通过界面使用它:
JExpression expression = ...
expression.component(JExpr.lit(1));
这适用于JCodeModel(JVar
,JInvocation
)中的其他常用表达式,因为它们都扩展为JExpression
。
尝试使用此方法并将表达式包含在JArrayCompRef
时,我遇到了类似的问题。
答案 1 :(得分:0)
其他任何人都想知道这是我所做的......
final JDefinedClass jDefindedClass = codeModel._class(JMod.PUBLIC, "org.sand.pit", ClassType.CLASS);
final JMethod jmethod = jDefindedClass.method(JMod.PUBLIC, void.class, "testMethod");
final JBlock jblock = jmethod.body();
final JExpression equalsZero = JExpr.lit(0);
final JVar jvarIndex = jblock.decl(JMod.FINAL, codeModel.parseType("int"), "arrayIndex", equalsZero);
final JExpression getArraySize = JExpr.lit(100);
final JClass wildcardClass = codeModel.ref("java.lang.Class");
final JArray newClassArray = JExpr.newArray(wildcardClass, getArraySize);
final JVar jvar = jblock.decl(JMod.FINAL, wildcardClass.array(), "parameterTypes", newClassArray);
final JAssignmentTarget theArray = JExpr.ref("parameterTypes").component(jvarIndex);
jblock.assign(theArray, JExpr._null());
这会生成folloiwng java
public void testMethod() {
final int arrayIndex = 0;
final Class[] parameterTypes = new Class[ 100 ] ;
parameterTypes[arrayIndex] = null;
}