2012-01-22 13 views

答えて

7

Scalaのビルトインimplicitly[T]は、タイプT(存在する場合)の暗黙の値を取得します。だから、implicitly[Manifest[T]]を使用すると、クラスの参照を持っている場合、あなたはこのようなクラスのマニフェストを得ることができるタイプのT.

のためのマニフェストを返します。

def manifestFor[T: Manifest](c: Class[T]) = implicitly[Manifest[T]] 

class Foo 
val x = new Foo 
manifestFor(x.getClass) 
//scala.reflect.Manifest[_ <: Foo] = _ <: Foo 

マニフェストのタイプは_ <: FooだけではなくFooですが、彼らは等しいです。

implicitly[Manifest[Foo]] == manifestFor(x.getClass) 
//Boolean = true 
+4

[マニフェスト[T]]を使用することもできます。これは、[暗黙的に[マニフェスト[T]]と同じです。 – tenshi

+0

良いもの - ありがとう! – Josh

0

まあ、私は似たようなことをしようとしていましたが、反射的でした。コンパイル時にクラスシンボルはありませんでした。私はこのコードを使用しなければなりませんでした。スケーラードからはっきりとしたものではありませんでした。そこには複数の非明白な方法や誤解を招く方法がありました。

Manifest.classType(Class.forName(className)) 
関連する問題