[英]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.