ループを使用して、呼び出しJExpression
で使用できるを作成する方法を見つけようとしています。.assign()
JCodeModel のようなことができることは知っていますが、メソッド名のリストに基づいてJExpr.invoke("methodA").invoke("methodB")
各メソッドを追加できるようにしたいと考えています。.invoke()
誰もこれを行う方法を知っていますか?
私の Generator コードの例 [これは、ArrayList.add() メソッドを変更して ArrayList を返すことを前提としています]:
JDefinedClass newClass = jCodeModel._class("com.me.GeneratedClass");
JClass refObject = jCodeModel.ref(Object.class);
JClass refArrayList = jCodeModel.ref(ArrayList.class);
JFieldVar objectList = newClass.field(refArrayList, "objects");
JBlock methodBody = newClass.method(JMod.PUBLIC, refArrayList, "getNewObjectList");
String[] methodsToInvoke = {"add", "add", "add"};
JExpression rhsAssignmentExpression = JExpr._new(refArrayList).narrow(refObject);
for(String methodName : methodsToInvoke) {
rhsAssignmentExpression.invoke(methodName).arg(JExpr._new(refObject));
}
methodBody.assign(objectList, rhsAssignmentExpression);
methodBody._return(objectList);
私が生成しようとしているものの例:
class GeneratedClass {
ArrayList<Object> objects;
public ArrayList<Object> getNewObjectList()
{
objects = new ArrayList<Object>().add(new Object()).add(new Object()).add(new Object());
return objects;
}
}
私の問題は、このメソッドが呼び出しメソッドを連鎖させず、それらを置き換えて、生成されたコードが次のようになることです。
class GeneratedClass {
ArrayList<Object> objects;
public ArrayList<Object> getNewObjectList()
{
objects = new ArrayList<Object>().add(new Object());
return objects;
}
}