Created
May 30, 2012 09:55
-
-
Save yamashiro/2835272 to your computer and use it in GitHub Desktop.
Traitつき無名クラス
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.specs2.mutable._ | |
trait BarTrait {} | |
class Hoge {} | |
class TraitGetClassTest extends Specification { | |
"Trait mixin " should { | |
"getClass " in { | |
val hoge = new Hoge with BarTrait | |
hoge.getClass.toString must_== "Hoge" | |
} | |
} | |
} |
(内部的に無名クラスの命名規則は一応あるだろうけど) 完全に実装依存だし、そもそもあまりやるべきではないのでは・・・?
単に取るなら上記のコードでやってるように getClass.toString
や getClass.getName
でとれるけど、それをコンパイル時に事前に静的に予測するってことですか?
あぁ、(無名クラス自体の名前じゃなく)無名クラスのsuperClassのHogeをとりたいってことか・・・?
その辺(完全に実装依存)は承知の上です。自分もあまりやるべきとは思いませんが、必要そうだったので。
https://twitter.com/kmizu/status/207773777390604289
で、@yamashiroさんが必要だったのは、
あぁ、(無名クラス自体の名前じゃなく)無名クラスのsuperClassのHogeをとりたいってことか・・・?
ですね。ちなみに、実装依存ではあっても、この部分の実装(new ClassName with Trait1 with ...)で、ClassNameのClassオブジェクトを取る方法はそうそう変わらないだろう
という意味では、そこそこ精度は高いと思います。
ためしてないんですがspecs2だとこのへんでしょうか
haveClass: to check the class of an object
haveSuperclass: to check if the class of an object as another class as one of its ancestors
haveInterface: to check if an object is implementing a given interface
beAssignableFrom: to check if a class is assignable from another
beAnInstanceOf[T]: to check if an object is an instance of
具体的な目的としては、ログに"Hoge"という文字列を出したいんですよね…
確かに実装依存ですよね…
Yasushi さんの張ったspecs2のmatcherのソース明日見てみようっと…あざす
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hoge.getClass.getSuperclass.toString must_== "Hoge"
でいけます。