Java
なんらかの型のインスタンスに対してgetClassしてClass型インスタンスを取得する例。
java
Class<?> c = "j".getClass();
これはScalaでも同様に可能。
scala
val c = "j".getClass
一方、これはそのままではダメだった。
java
Class<?> c = String.class;
scala
val c = String.class // error: identifier expected but 'class' found.
Scala
上記に該当するものはこう書く。
val c = classOf[String]
ジェネリクス型の場合
getClassについてはこれは先ほどと同様問題ない。
def foo[T](x: T) = x.getClass
一方classOfはダメだった。コンパイルエラー。
def foo[T] = classOf[T] // error: class type required but T found
こう書く。
import scala.reflect.ClassTag
def foo[T](implicit tag: ClassTag[T]) = tag.runtimeClass