総称型から本当の型を取得したい

これを参考に


なんというか、ほえー

package main.scala

import java.lang.reflect.ParameterizedType

trait G[T] {
  def getGenericClass: java.lang.Class[T] = {
    getClass().getGenericInterfaces()(0)
      .asInstanceOf[ParameterizedType]
      .getActualTypeArguments()(0)
      .asInstanceOf[java.lang.Class[T]]
  }
}

class A extends G[A]

object Main {
  def main(args: Array[String]) = {
    val a = new A
    println(a.getGenericClass)
  }
}

実行結果

class main.scala.A

これは大変なことやと思うよ