2014-03-07 152 views
1

對象數組的初始化Groovy中我有下面的代碼:包含數組屬性

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

客戶陣列的初始化似乎是正確的。如果我只有「ID」字段,它工作正常。然而,當我添加了「用戶」字段,用代碼顯示上面我得到「沒有這樣的特性:用戶」上線:

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

這是爲什麼?此外,我是Groovy的新手,因此請指出上述代碼的其他問題。

+2

in'for(j = 0; j emesx

+0

確實,謝謝。我忽略了它,也是因爲我目前使用的編輯沒有指出錯誤的位置。確信它在前一行。 –

回答

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

是造成麻煩的線路。沒有users變量在運行腳本的類中定義。從你的代碼來看,你可能想用

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

對於未來,我建議使用一個IDE,的IntelliJ有一個非常好的Groovy的支持。

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

如何

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

沒有試過它,但我認爲沒關係

相關問題