Wicket 1.4-m3 で Generics の仕様変更

ちょうど少し前にWicket 1.4でのGenerics化にて大論争というページを教えてもらったのですが、その結論が見えてきたみたいです。

This release is our final take on how to apply generics to our codebase with restraint. We hope to provide an elegant programming model without having to specify generic parameters everywhere, while still providing type safety when you need it.

Apache Wicket 1.4-m3 with improved generics

Wicket 1.4-m3では、ComponentはGenerics化せず、Genericsは一部のコンポーネントだけに導入する形になったようです。個人的には、RepeatableなクラスぐらいでしかGenericsのありがたみを感じていなかったので、記述がシンプルになるのはうれしい変更です。

A significant change from the earlier Wicket 1.4 milestone versions is that Component is no longer generified. This means that Component and most of its subclasses in Wicket do not take a class-level type parameter.

Apache Wicket 1.4-m3 with improved generics

問題となっていたgetModelObjectの扱いについては、既存のObject型を返すメソッドはgetDefaultModelObjectというメソッドに改名し、Genericsを導入したクラスにだけパラメータ化された型のオブジェクトを返すgetModelObjectを実装することにしたようです。

言葉にすると分かりにくいのですが、つまりは下記のような感じになるみたいです。

// Componentクラス
Object getDefaultModelObject()

// 一部のクラス(FormとかListView)
T getModelObject() // Generics化されたクラスではこれが追加される
Object getDefaultModelObject()

この関係でComponentクラスのModel関係のメソッドは全てDefaultが加わった形に変更されています。ComponentクラスからgetModelObjectが消えちゃったので、ソースレベルでの互換性は失われてしまった気もしますが、Genericsを利用する方を標準にしたいという意図なのでしょうか?

* getModel -> getDefaultModel
* setModel -> setDefaultModel
* getModelObject -> getDefaultModelObject
* setModelObject -> setDefaultModelObject

Wicket 1.4 M3 - New and Noteworthy

ちなみに、

We have released our third and hopefully final milestone release of our Java 5 based web framework and are anxious to receive feedback on our use of generics.

Apache Wicket 1.4-m3 with improved generics

とのことなので、いつものごとく(?)遅れていた Wicket 1.4 のリリースも近そうです。