我正在尝试学习如何创建简单的groovy类,这些类不是域类。我想在我的软件中创建一组类(及其对象),但无意保存到数据库。具体来说,我有一个关于如何创建一个具有属性列表的类的问题。像这样:
class oParent{
def fName
def lName
def listOfChildren
}
class oChild{
def propertyOne
def propertyTwo
}
所以,通过这个例子,我可以像这样创建一个对象:
def p = new oParent();
def cOne = new oChild();
def cTwo = new oChild();
p.fName ="SomeName"
p.lName ="some Last Name"
cOne.propertyOne = "a"
cOne.propertyTwo = "b"
cTwo.propertyOne = "c"
cTwo.propertyTwo = "d"
那么,我如何将每个子对象(cOne和cTwo)添加到父对象p)。一旦添加,我将如何遍历父类的子属性,例如,打印所有子类的所有propertyTwo属性?
答案 0 :(得分:4)
以下是代码的注释版本,其中包含一些更改建议:
// 1) Class names start with a Capital Letter
class Parent {
// 2) If you know the type of something, use it rather than def
String fName
String lName
// 3) better name and type
List<Child> children = []
// 4) A utility method for adding a child (as it is a standard operation)
void addChild( Child c ) {
children << c
}
// 5) A helper method so we can do `parent << child` as a shortcut
Parent leftShift( Child c ) {
addChild( c )
this
}
// 6) Nice String representation of the object
String toString() {
"$fName, $lName $children"
}
}
// See 1)
class Child{
// See 2)
String propertyOne
String propertyTwo
// See 6)
String toString() {
"($propertyOne $propertyTwo)"
}
}
// Create the object and set its props in a single statement
Parent p = new Parent( fName: 'SomeName', lName:'some Last Name' )
// Same for the child objects
Child cOne = new Child( propertyOne: 'a', propertyTwo: 'b' )
Child cTwo = new Child( propertyOne: 'c', propertyTwo: 'd' )
// Add cOne and cTwo to p using the leftShift helper in (5) above
p << cOne << cTwo
// prints "SomeName, some Last Name [(a b), (c d)]"
println p
然后,你可以这样做:
println p.children.propertyTwo // prints "[b, d]"
或者这个:
p.children.propertyTwo.each { println it } // prints b and d on separate lines
或者,确实如此:
p.children.each { println it.propertyTwo } // As above
答案 1 :(得分:0)
class oParent{
def fName
def lName
def listOfChildren = []
}
class oChild{
def propertyOne
def propertyTwo
}
def p = new oParent();
def cOne = new oChild();
def cTwo = new oChild();
p.fName ="SomeName"
p.lName ="some Last Name"
cOne.propertyOne = "a"
cOne.propertyTwo = "b"
cTwo.propertyOne = "c"
cTwo.propertyTwo = "d"
p.listOfChildren.add(cOne)
p.listOfChildren.add(cTwo)
我可以像这样迭代:
p.listOfChildren.each{ foo->
log.debug(foo.propertyOne)
}