如何从对象扩展的抽象类中获取类型参数

时间:2019-06-06 08:56:24

标签: scala reflection

假设我有一个扩展一些抽象类的对象

case class Id[T] private(v: String)

object SomeObj extends SomeAbstractClass[SomeCaseClass, AnotherObj.type, Id[SomeCaseClass]]

是否可以在运行时从SomeObj获取以下类型参数?

  • SomeCaseClass
  • AnotherObj.type
  • Id [SomeCaseClass]

1 个答案:

答案 0 :(得分:3)

假设这些导入和定义(对于一个独立的示例):

1

明确引用(None, 100, 100, 1024)

import scala.reflect.runtime.universe._
trait Foo[A, B, C]
object Bar extends Foo[Int, String, Option[Short]]

不参考Bar.type

internal
  .thisType(typeOf[Bar.type].typeSymbol.asClass)
  .baseType(typeOf[Foo[_,_,_]].typeSymbol.asClass)
  .typeArgs

两者都给出:

Bar.type

两种解决方案均受this answer here的启发。