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

时间:2014-03-07 17:17:10

标签: 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)
    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 
    }
}

customers数组的初始化似乎是正确的。如果我只有“id”字段,它可以正常工作。但是,当我添加“users”字段时,上面显示的代码我得到“No such property:users”就行了:

customers[i].users = new User[3]

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

3 个答案:

答案 0 :(得分:1)

在您的示例中,您正在创建customers[i].users = new User[3],但在将用户分配给客户时会在循环中测试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
    }
}

如果您想用List替换用户数组,那么它可能如下所示:

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)
  }
}

答案 1 :(得分:1)

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

是造成麻烦的线。运行脚本的类中未定义users变量。从您的代码判断,您可能想要使用

 for (j=0; j<customers[i].users.size(); j++) {

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

答案 2 :(得分:0)

怎么样

Customer[] customers = (1000..1005).collect { id ->
    new Customer( id:"$id", users:(1..3).collect {
        new User( id:"$id" )
    } )
}

没试过,但我认为没关系