Arrays 包含数组属性的对象数组的Groovy初始化

Arrays 包含数组属性的对象数组的Groovy初始化,arrays,groovy,initialization,Arrays,Groovy,Initialization,我有以下代码: class User { String id = "" } class Customer { String id = "" User[] users } Customer[] customers = new Customer[5] for (i=0;i<numCustomers;i++) { customers[i] = new Customer() customers[i].id = "customer:" + (1000+i

我有以下代码:

class User {
    String id = ""
}

class Customer {
    String id = ""
    User[] users
}

Customer[] customers = new Customer[5]

for (i=0;i<numCustomers;i++) {
    customers[i] = new Customer()
    customers[i].id = "customer:" + (1000+i)
    customers[i].users = new User[3]
    for (j=0; j<users.size(); j++) {
         customers[i].users[j] = new User()
         customers[i].users[j].id = customers[i].id 
    }
}

为什么会这样?另外,我是Groovy新手,所以请指出我上面代码中的任何其他问题。

在您的示例中,您正在创建
customers[I].users=new User[3]
但在将用户分配给custumer时在循环中测试users.size()

假设numCustomers=5,尝试以下方法:

for (i=0; i < numCustomers; i++) {
    Customer customer = new Customer()
    customers[i] = customer
    customer.id = "customer:" + (1000+i)
    customer.users = new User[3]
    for (j=0; j < 3; j++) {
         User user = new User()
         user.id = customer.id
         customer.users[j] = user
    }
}
for(i=0;i
如果要将用户数组替换为列表,则可以如下所示:

class Customer {
    String id = ""
    List<User> users = new ArrayList<User>()
}

for (i=0; i < numCustomers; i++) {
  // ...
  for (j=0; j < 3; j++) {
    User user = new User()
    user.id = customer.id
    customer.users.add(user)
  }
}
class客户{
字符串id=“”
列表用户=新建ArrayList()
}
对于(i=0;i
怎么样

Customer[] customers = (1000..1005).collect { id ->
    new Customer( id:"$id", users:(1..3).collect {
        new User( id:"$id" )
    } )
}
没有试过,但我觉得没关系

 for (j=0; j<users.size(); j++) {

对于未来,我建议使用IDE,IntelliJ有一个非常好的Groovy支持。

For(j=0;jindead,谢谢。我忽略了它,也是因为我现在使用的编辑器没有指出错误所在。我确信它在前一行。
 for (j=0; j<users.size(); j++) {
 for (j=0; j<customers[i].users.size(); j++) {