Groovy でクラスを定義する

クラスを定義する

Groovy では、クラスやメソッドの可視性はデフォルトで public になります。 下記の Book クラスは titleauthors フィールドを持っており、両方とも外部から参照できます。

sample.groovy
class Book {
    def title
    def authors = []
    def getLabel() {
        title + ', ' + authors
    }
    String toString() {
        getLabel()
    }
}

def book = new Book()
book.title = 'Title1'
book.authors << 'Author1' << 'Author2' << 'Author3'
println book
実行例
$ groovy sample.groovy
Title1, [Author1, Author2, Author3]

上記の例では、book.title というプロパティに直接アクセスしているかのように見えますが、内部的には、自動的に生成された book.getTitle() という getter メソッドが呼び出されています。 同様に、book.setTitle() という setter メソッドも自動的に生成されています。

つまり、下記の 2 つのコードは同じ動作をします。

book.title = 'Title1'
println book.title
book.setTitle('Title1')
println book.getTitle()

名前付きパラメータによるコンストラクタ呼び出し

コンストラクタを呼び出すときに、名前付きパラメータを指定することで、任意のプロパティを初期化することができます。

class Book {
    def title
    def authors
}

def book = new Book(title:'Title1', authors:['Author1', 'Author2'])
println book.authors