[英]Generate a call to a method with a variable number of arguments
我正在使用JavaPoet生成给定字段列表的类。
生成一个采用此字段列表并将其转换为参数列表的构造函数非常简单,如下所示:
val constructor = MethodSpec.constructorBuilder()
for ((fieldName, typeName) <- fields) {
constructor.addParameter(typeName, fieldName)
}
我还想生成一个静态方法,该方法实例化所生成类的新对象,这需要我生成一个使用上述字段列表的代码块。
目前,我正在通过以下方式实现这一目标:
method
.addStatement(s"return new $$T(${fields.map(_._1).mkString(", ")})", className)
它可以工作,但是我想知道是否有一种更“惯用”的方式来使用JavaPoet通过内置的模板支持来构建参数列表。
为了避免混合使用Scala的插值和JavaPoet的模板,看起来最好的方法是制作一个包含参数列表的CodeBlock
并将其嵌入模板中的代码中,如以下示例所示:
val params = fields.map { case (name, _) => CodeBlock.of(name) }
val paramList = CodeBlock.join(params.asJava)
method.addStatement("return new $T($L)", className, paramList)
此处的模板使用$L
占位符,该占位符将被文字(在本例中为汇编的参数列表)替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.