我有以下代码:
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的新手,所以请在上面的代码中指出任何其他问题。
答案 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" )
} )
}
没试过,但我认为没关系