Java 如何在groovy中将多个字符串参数传递给函数

Java 如何在groovy中将多个字符串参数传递给函数,java,groovy,Java,Groovy,我试图将多个字符串作为参数传递给函数 功能: 描述 将一行列标题添加到此网格。 这应该在列中的每个维度上调用一次,并且每个维度的标题长度应该匹配 Groovy从2016财年和2017财年添加1月、2月、3月的调用示例: builder.addColumn('2016', '2016', '2016', '2017', '2017', '2017') builder.addColumn('Jan', 'Feb', 'Mar', Jan', 'Feb', 'Mar') 因此,如果我像上面的示例中

我试图将多个字符串作为参数传递给函数

功能:

描述

将一行列标题添加到此网格。 这应该在列中的每个维度上调用一次,并且每个维度的标题长度应该匹配

Groovy从2016财年和2017财年添加1月、2月、3月的调用示例:

builder.addColumn('2016', '2016', '2016', '2017', '2017', '2017') 
builder.addColumn('Jan', 'Feb', 'Mar', Jan', 'Feb', 'Mar')

因此,如果我像上面的示例中那样传递参数,它就可以正常工作。。我无法找到在groovy中动态传递它的方法???

您可以使用splat操作符:

def headers = ['Jan', 'Feb', 'Mar', 'Jan', 'Feb', 'Mar']

addColumn(*headers)

在这种情况下,它将作为varags展开集合。

您可以使用splat操作符:

def headers = ['Jan', 'Feb', 'Mar', 'Jan', 'Feb', 'Mar']

addColumn(*headers)

在本例中,它将作为varags展开集合。

在本例中,您始终可以传递字符串数组。你的方法

void addColumn(java.lang.String... headers)
使用,这意味着您可以按原样调用此方法

void addColumn(java.lang.String[] headers)
Varargs在某些情况下很有用,因为它接受单个参数以及n个相同类型的参数

如果要在Groovy中调用此方法,可以通过将列表转换传递给String[],例如

运行此脚本将打印到输出:

Ex 1:
Adding column Jan...
Adding column Feb...
Adding column Mar...
Adding column Apr...
Ex 2:
Adding column Jan...
Adding column Feb...
Adding column Mar...
Adding column Apr...

我希望它能有所帮助。

在这种情况下,您始终可以传递字符串数组。你的方法

void addColumn(java.lang.String... headers)
使用,这意味着您可以按原样调用此方法

void addColumn(java.lang.String[] headers)
Varargs在某些情况下很有用,因为它接受单个参数以及n个相同类型的参数

如果要在Groovy中调用此方法,可以通过将列表转换传递给String[],例如

运行此脚本将打印到输出:

Ex 1:
Adding column Jan...
Adding column Feb...
Adding column Mar...
Adding column Apr...
Ex 2:
Adding column Jan...
Adding column Feb...
Adding column Mar...
Adding column Apr...

我希望能有所帮助。

谢谢您的回复。。我尝试了代码,但它给了我这个错误..[静态类型检查]-扩展运算符不能用作静态类型检查的方法或闭包调用的参数,因为在编译时无法确定参数的数量。您是否在代码中使用@CompileStatic?如果是这样,它将无法工作,您需要删除注释。如果您无法删除它,那么我不知道如何执行您的要求。您还可以将此代码所使用的特定方法标记为跳过版本的注释,使其成为非静态的。我不知道@compilestatic。这个函数是由Oracle工具提供的,我们只是调用这个函数。正如我提到的,如果我硬编码addColumnJan,它可以工作,但我想动态地传递参数。。不确定如何完成这项工作:如果此工具正在强制执行静态编译,则不确定您可以执行哪些操作。感谢您的回复。。我尝试了代码,但它给了我这个错误..[静态类型检查]-扩展运算符不能用作静态类型检查的方法或闭包调用的参数,因为在编译时无法确定参数的数量。您是否在代码中使用@CompileStatic?如果是这样,它将无法工作,您需要删除注释。如果您无法删除它,那么我不知道如何执行您的要求。您还可以将此代码所使用的特定方法标记为跳过版本的注释,使其成为非静态的。我不知道@compilestatic。这个函数是由Oracle工具提供的,我们只是调用这个函数。正如我提到的,如果我硬编码addColumnJan,它可以工作,但我想动态地传递参数。。不确定如何完成这项工作:如果此工具强制进行静态编译,则不确定您可以做什么。