1

你如何使用com.sun.codemodel来生成这个 java 语句?

constructorArgs[constructorArgIndex] = null;

我尝试使用com.sun.codemodel.JArrayCompRefviacomponent()但是我 com.sun.codemodel.JArrayCompRef在尝试调用方法时不可见assign()

声明如下com.sun.codemodel.JArrayCompRef:-

final class JArrayCompRef extends JExpressionImpl

实现 JAAssignmentTarget

4

2 回答 2

2

.component()可通过JExpression接口获得。您需要做的就是通过界面使用它:

JExpression expression = ...
expression.component(JExpr.lit(1));

这适用于 JCodeModel( JVar, JInvocation) 中的其他常用表达式,因为它们都是扩展JExpression的。

在尝试使用此方法并将表达式封装为JArrayCompRef.

于 2014-09-10T13:31:13.143 回答
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());

这会生成以下 java

    public void testMethod() {
    final int arrayIndex = 0;
    final Class[] parameterTypes = new Class[ 100 ] ;
    parameterTypes[arrayIndex] = null;
}
于 2014-09-11T08:52:10.367 回答