方々で既出の話だと思うので細かく触れませんが、C#の自動プロパティ的なものがJavaにあればなぁ、と思うわけです。
基本的にIDE(NetBeans)の自動生成でgetter/setterを生成するので手間はないし、コードは折り畳んでおくのでそれほど問題にはならないのですが、やはり(一応真面目に)コメントを入れると手間が出ます。
getter/setterにコメントって…という話もありそうですが…(^^;
今回、初Java EEということで、他に優先度を上げて学ばねばならないことがそれなりにあったため、これに関しては放置してきたわけですが、少し前にLombok(http://projectlombok.org/)なるものがあることを(Software Designだったかな?)で知り、やっとこ今日触ってみたのですが…
最初から触るべきだった…
あーあ(-_-;
みたいな
……
…
気を取り直して、試したことだけまとめときます。
BackingBeanの定義を例えば
package jp.co.hoge.lomboksample;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named(value = "lombokBean")
@RequestScoped
public class LombokBean {
private String hoge;
}
のようにしたとき、NetBeansのメンバには当然
としか出ません。
もちろんJSFのViewでも
インテリセンスで何も出ないわけです。
で、Lombakを使ってみます。Mavenを使っている場合pom.xmlに
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>0.11.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
と定義するだけでよくて、最初に書いたBacking Beanでclassの前に@Dataと書けば
package jp.co.hoge.lomboksample;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import lombok.Data;
@Named(value = "lombokBean")
@RequestScoped
public @Data class LombokBean {
private String hoge;
}
すぐにNetBeansのウィンドウが更新されて
と…。@Dataだとgetter/setter以外にもつけるのですね。
で当然、Viewも
でる。
シンプルにgetter/setterのみだったら、変数の前に@Getter,@Setterを書けば
package jp.co.hoge.lomboksample;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import lombok.Getter;
import lombok.Setter;
@Named(value = "lombokBean")
@RequestScoped
public class LombokBean {
@Getter @Setter private String hoge;
}
はい、でました。
これは標準で欲しいっすわ…。
プロパティはJava SE 7で導入が予定されていたのが延びたとか…な、なぜ?うーむ。
てか、今からこれ(Lombok)を正式に導入するかどうかが一番悩む(ノД`)
結構開発進んでいるだけに。
一番安全なのは、今回のプロジェクトでは見送って次回Java EE開発が別件であるのならば取り入れる感じかなぁ…。
知らなかった自分が完全に悪いのですが、やっぱり悲しい…。
LombokはJava開発者的には使うのが当たり前なものなんですかね。。。こういう悩みは.NETだと少ないよなぁと改めて思ったり。
stackoverflowに「Is it safe to use Project Lombok?」ってのがあって、今まさに自分も同じ質問を心に感じているので、よく読んでみようと思います。