Re: InterType

まさたかさんへのレス.

@PageModel
public interface IndexModel {
  @Property
  String getUserId();
}

これもおもしろそうですね.

なぜ今回のInterTypeのようなフィールドを書いてアノテーションする方法を避けたかというと、Javaインターフェイスではフィールドが書けないためです。

ふむ.
正確にはインタフェースにもフィールドを書くことはできます.
ただし,全ては public static final の,いわゆる定数になるわけですが.
なので,それをインスタンスフィールドとして直接使うわけにはいきません.
でもでも,結局はそのインタフェースを実装したクラスを生成するのなら,そこで同名の非 static final なフィールドを定義しちゃえばいいような.
例えば

@PageModel
public interface IndexModel {
  @Property
  String userId = null;
}

って書いたら

public class IndexModel$ implements IndexModel {
  private String userId = null;

  public String getUserId() {
    return userId;
  }
  public void setUserId(String userId) {
    this.userId = userId;
  }

ってことにしちゃう.
実装クラスに同名のフィールドがあってもこのケースでは実用上問題なしです.
あるいは,生成されるフィールドはどうせ直接使わないのだから,prefix / suffix を付けても構いませんよね.
インタフェースに記述するのが定数なので,初期値を明示的に書かなきゃいけないのがちょっと面倒かな?
まぁ,こんなアイディアもあるということで.