memo2013年9月30日月曜日akkaのActorを抽象化する方法を試行錯誤するakkaを使ってActorをゴリゴリ作ってると、当然Actorを抽象化したいという要求が出てくるよね。こんな方針で抽象化を試みる。Actorを継承したtraitを作って、共通処理を抽象化する。作ったtraitは型パラメータを持たせて、具象クラス化するときに例えば受け取るメッセージの型を指定する。なんでわざわざ型パラメータなんて持たせてるかというと、これをやりたい。MyMessage)にしといて、その型の挙動は型クラスのインスタンス(MesShow)で制御したいというわけ。ところが、この実装には問題がある(実際に上記コードはコンパイルが通らない)。MesType」という判定はできない、となる。これを解決するためには、Anyで渡ってくるメッセージはobj.getClassを経由してRuntimeにクラス情報を取得する型パラメータの方は、TypeTagを渡すことでRuntimeまでクラス情報を引き継ぐとやるしかない、と思う。書いてみたのが以下のコード。TypeTagをわざわざ指定してやらないといけないところとか、asInstanceOfでダウンキャストしてるところとか、カッコ悪い。