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 まで。