2

変数を型として使用するにはどうすればよいですか? 例えば:

scala> class A
defined class A

scala> class B extends A
defined class B

scala> def convert[F, T](from: F): T = from.asInstanceOf[T]
convert: [F, T](from: F)T

scala> val b = new B
b: B = B@54038f36

scala> convert[B, A](b)
res18: A = B@54038f36

これはうまくいきます。しかし、私はすることに興味があります:

scala> val aType = classOf[A]
aType: Class[A] = class A

scala> convert[B, aType](b)
<console>:12: error: not found: type aType
              convert[B, aType](b)

オブジェクトを初期化してそこで使用せずにこれを行うにはどうすればよいobj.typeですか? いくつかのリフレクション機能を使用する必要があると思いますが (おそらくTypeTag?)、ここで使用する正しいものを見つけることができませんでした。

ありがとう!

4

1 に答える 1

5

Javaには、必要なことを正確にClass行うメソッドがあります。cast

val aType = classOf[A]
aType.cast(b)

メソッドとして:

def convert[F,T](from: F, clazz: Class[T]) = clazz.cast(from)

そして呼び出します:

convert(b, aType)
于 2013-06-26T14:09:57.947 に答える