可选的Java操作数,如Ruby';s |*foo |用于阶跃定义

可选的Java操作数,如Ruby';s |*foo |用于阶跃定义,java,ruby,cucumber,Java,Ruby,Cucumber,我在任何地方都找不到答案。甚至这个问题也很难用语言表达,所以让我用代码提问: 在Ruby中,我们可以这样做(为Cucumber编写的步骤定义): “splat”表示获取表是可选的 我们如何在Java中做到这一点?除了重载方法之外: @When ("foo") public void overloadedMethod(){ code } public void overloadedMethod(table){ code } 重载方法是获得相同结果的唯一方法吗?在Ruby中,星号语法(*t

我在任何地方都找不到答案。甚至这个问题也很难用语言表达,所以让我用代码提问:

在Ruby中,我们可以这样做(为Cucumber编写的步骤定义):

“splat”表示获取表是可选的

我们如何在Java中做到这一点?除了重载方法之外:

@When ("foo")    
public void overloadedMethod(){ code }
public void overloadedMethod(table){ code }

重载方法是获得相同结果的唯一方法吗?

在Ruby中,星号语法(
*table
)不仅意味着参数是可选的,而且意味着所有参数都收集在一个数组中,您可以在方法体(本例中为块)中访问。这可能包括零个参数,这将为您提供一个空数组

Java具有类似的功能,包括:

然后,您可以通过以下任一方式调用此方法(假设
foo
bar
baz
都是对类型为
AType
的对象的引用):

myMethod(foo);

myMethod(foo, bar, baz);

myMethod();

从现在起,使用单词
splat
。splat运算符用于处理具有可变参数列表的方法
public void myMethod(AType... things) {
  // things is an array of AType objects
}
myMethod(foo);

myMethod(foo, bar, baz);

myMethod();