Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaParser:如何向链式调用添加方法调用?_Java_Javaparser - Fatal编程技术网

JavaParser:如何向链式调用添加方法调用?

JavaParser:如何向链式调用添加方法调用?,java,javaparser,Java,Javaparser,给定链接调用(生成器模式): returnnewthingbuilder().withA(a).withB(b.build(); 如何使用JavaParser添加另一个链式调用,最终得到如下代码: returnnewthingbuilder().withA(a).withB(b).withC(c.build(); 我已经熟悉了修饰符visitor,但找不到一个好方法将调用添加到正确的位置,即添加到相关的MethodCallExpr(其中表达式为newthingbuilder().withA(

给定链接调用(生成器模式):

returnnewthingbuilder().withA(a).withB(b.build();
如何使用JavaParser添加另一个链式调用,最终得到如下代码:

returnnewthingbuilder().withA(a).withB(b).withC(c.build();
我已经熟悉了
修饰符visitor
,但找不到一个好方法将调用添加到正确的位置,即添加到相关的
MethodCallExpr
(其中表达式为
newthingbuilder().withA(a).withB(b)
,方法为
build()

如果可能的话,也可以将其添加到顶层:

returnnewthingbuilder().withC(c).withA(a).withB(b.build();

我能够让它工作:

@覆盖
公众可访问访问访问(最终方法调用Expr n,最终无效参数){
最终就诊=超级就诊(n,arg);
如果(!n.getName().getIdentifier().equals(“构建”)){
回访;
}
n、 getScope()
.filter(表达式::isMethodCallExpr)
.map(表达式::asMethodCallExpr)
.filter(方法->方法.getName().getIdentifier().equals(“withB”))
.ifPresent(方法->{
final Node leftSide=n.getChildNodes().get(0);
最终可选范围=n.getScope();
final MethodCallExpr withC=新MethodCallExpr(“withC”,新名称expr(“c”);
左侧。替换(用C);
范围。如果存在(使用C::设置范围);
});
回访;
}

我很乐意知道是否有更优雅的方法来做这件事。

我会接受这样的回答:“这是最不粗俗的方法”