创建groovy类

时间:2012-09-29 20:32:34

标签: grails groovy

我正在尝试学习如何创建简单的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属性?

2 个答案:

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