-
-
Save xuwei-k/3554585 to your computer and use it in GitHub Desktop.
ScalaのClassManifestについてハマった
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
// コンストラクタをプライベートにし、コンパニオンオブジェクト経由でのみ生成させる。 | |
class ClassName[A] private (val clazz: Class[A]) { | |
// toString で、引数に指定されたクラスの名称を返す。 | |
override def toString(): String = { | |
clazz.getName | |
} | |
} | |
object ClassName { | |
// Classを直接渡して生成する。 | |
def create[A](clazz: Class[A]): ClassName[A] = new ClassName(clazz) | |
// 型パラメータの情報を ClassManifest から取得して生成する。 | |
def create[A]()(implicit m: ClassManifest[A]) = new ClassName(m.erasure) | |
} | |
object Main extends App { | |
val c1 = ClassName.create(classOf[String]) | |
val n1 = println(c1.toString) // => java.lang.String | |
val c2 = ClassName.create[Int] | |
val n2 = println(c2.toString) // => int | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment