我有两种方法 - 名为one
和two
。方法one
需要List<Person>
,其中person
是某个类,方法two
采用Person
类的单个对象。
如何将List<Person>
作为单个对象参数传递给方法two
?
List
可以包含0个或1个或更多元素,如果列表没有方法null
所需的所有3个参数,我想传递two
。
def one (List<Person> persons) {
// check the size of the list
// pass arguments to method two
// this works
two(persons[0], persons[1], persons[2])
//what I want is
two(persons.each { it + ', '})
}
def two (Person firstPerson, Person secondPerson, Person thirdPerson) {
// do something with the persons
}
答案 0 :(得分:11)
使用:
two(*persons)
*
将拆分列表并将其元素作为单独的参数传递。
它将是:
def one (List<String> strings) {
two(strings[0], strings[1], strings[2])
two(*strings)
}
def two (String firstPerson = null, String secondPerson = null, String thirdPerson = null) {
println firstPerson
println secondPerson
println thirdPerson
}
one(['a','b','c'])
答案 1 :(得分:8)
你可以使用传播操作符*作为你的调用方法,但是根据你的注释&#34;列表可以包含0或1个或更多元素&#34;您将需要为第二种方法使用可变参数函数。试试这个:
// Spread operator "*"
def one(List<Person> persons) {
two(*persons)
}
// Variadic function "..."
def two(Person... values) {
values.each { person ->
println person
}
}
现在你可以调用两个方法传递null,一个空列表或任意数量的Person实例,例如:
two(null)
two([])
two(person1, person2, person3, person4, person5)