如何使用Java codeModel为数组的特定索引赋值

如何使用Java codeModel为数组的特定索引赋值,java,code-generation,sun-codemodel,Java,Code Generation,Sun Codemodel,如何使用com.sun.codemodel生成此java语句 constructorArgs[constructorArgIndex] = null; 我试着通过component()使用com.sun.codemodel.jarraycmpref 试图调用方法assign() Ascom.sun.codemodel.jarraycmpref声明如下:- final class JArrayCompRef extends JExpressionImpl 实现JAssignmentTarget

如何使用
com.sun.codemodel
生成此java语句

constructorArgs[constructorArgIndex] = null;
我试着通过
component()
使用
com.sun.codemodel.jarraycmpref
试图调用方法
assign()

As
com.sun.codemodel.jarraycmpref
声明如下:-

final class JArrayCompRef extends JExpressionImpl
实现JAssignmentTarget

.component()
可通过
JExpression
界面获得。您只需通过界面使用它:

JExpression expression = ...
expression.component(JExpr.lit(1));
这适用于JCodeModel中的其他常见表达式(
JVar
jinovate
),因为它们都扩展了
JExpression


我在尝试使用此方法并将表达式压缩为
jarraycmpref

时遇到了类似的问题,其他人都想知道这就是我最终要做的

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());
这将生成以下java

    public void testMethod() {
    final int arrayIndex = 0;
    final Class[] parameterTypes = new Class[ 100 ] ;
    parameterTypes[arrayIndex] = null;
}

您的最终目标是什么?我正在创建数百个Json映射java对象和相关JUnit。这段代码的一部分需要这种类型的处理构造函数args[constructorArgIndex]=null;我不得不求助于使用directStatements,当使用像codeModel这样功能强大的东西时,这感觉不正确,codeModel有特定的类和接口来生成与数组关联的java代码。