cloneをサブクラスに実装を強制させたい。でも出来ない。
かといって、「必ず実装する。とらすとみー」なんて言えるほど賢くない。むしろ愚かであることを信用している。
「cloneを利用する実装がそもそも間違いで悪手。cloneを使うなとEffective Javaにもあるだろ、アホ」という正論は確かにそうなのだが、複雑な状態遷移マシンの各状態をclone以外の方法で保存するとなるとあまりに面倒くさすぎるという状況にぶち当たったと思って欲しい。cloneが楽なのだ。
色々検索してみたんだけど、これと言った解決策が見当たらない。Lombokあたりなら何とかしてくれる………ということもなかった。
見つからないものは仕方がない。初めてAnnotation Processerを作ってみることにした。
まぁ、むりだろーなーとか思いながら始めること数時間、なんか結構それっぽく動く物が出来てしまった。なんとかなるモンだなぁ。
ソースコードとか、バイナリはGitHubにあげておきました。NoAnP(GitHub)
Eclipseではこんな感じにコンパイラの設定にJarファイルを設定すると、Annotation Processerが働いてくれる。(あと、ビルドパスも。)