Groovy > クラスの定義

更新日 2012-08-14
広告
Groovyでは、Javaよりも簡単にクラスを定義できます。
例として、クラス Human を定義してみます。ファイル名の拡張子は .groovy とします。
class Human { 
  String name
  Integer age
  Date birthday

  static void main(args) {
    def human = new Human(name:"sweng", age:18, birthday:new Date())
    println("name = ${human.name}, age = ${human.age}, birdh = ${human.birthday}")
  }
}
これを実行すると、以下の結果になります。
$ groovy Human.groovy
name = sweng, age = 18, birdh = Wed Aug 15 01:02:28 JST 2012
クラス Human では、3つのクラス変数(name, age, birthday)と、mainメソッドを定義しています。クラス変数の宣言時にアクセス修飾子を省略した場合、publicなsetter/getterメソッドを持つprivate変数とみなされます(アクセス修飾子を指定した場合は、その修飾子どおりのスコープになります)。mainメソッドでは、JavaScriptのリテラル表記っぽくHumanオブジェクトを生成し、printlnで変数値を出力しています。このとき、Groovyは、Groovyが自動的に作成したsetter/getterを呼び出して、変数にアクセスしています。
Groovyが自動的に生成するsetter/getterメソッドは、Java Beansと同じ命名規則になります。例えば、変数ageのsetter/getterを上書き(オーバーライド)したければ、以下のようにすればよいです。
class Human {
  String name
  Integer age
  Date birthday

  Integer getAge() { 
    println("get age")
    return age
  }

  void setAge(age) { 
    println("set age")
    this.age = age
  }

  static void main(args) {
    println("create human object")
    def human = new Human(name:"sweng", age:18, birthday:new Date())
    println("print out variables")
    println("name = ${human.name}, age = ${human.age}, birdh = ${human.birthday}")
  }
}
再度、実行してみます。
$ groovy Human.groovy
create human object
set age
print out variables
get age
name = sweng, age = 18, birdh = Wed Aug 15 01:22:38 JST 2012
オーバーライドしたメソッドが呼び出されています。setter/getterメソッドのスコープを絞りたければ、上記のようにオーバーライドする際に、privateやprotectedなどのアクセス修飾子を追加すればよいです。また、変数の宣言時に final を付けると、private変数として宣言され、setterメソッドは生成されません。
次に、別のクラス SampleMain から、Humanを利用してみます。
class SampleMain {
  static void main(args) { 
    def human = new Human(name:"sweng", age:18, birthday:new Date())
    println("name = ${human.name}, age = ${human.age}, birdh = ${human.birthday}")
   }
}
Human.groovyは、現在のディレクトリに作成し、SampleMain.groovyは、sweng/tips/ ディレクトリ以下に作成しました。つまり、以下のようなディレクトリ構成です。
$ ls
Human.groovy sweng/
$ ls sweng/tips/
SampleMain.groovy
これを実行すると、ちゃんと動きます。
$ groovy sweng/tips/SampleMain
set age
get age
name = sweng, age = 18, birdh = Wed Aug 15 01:26:17 JST 2012
このように、mainメソッドを持つ groovy ファイルを指定すれば、実行できます。 ファイルを指定する際、拡張子を省略しても大丈夫です。SampleMainには package や import などの宣言がありませんが、それでもちゃんと動きます。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system