How to get the actual type of a generic type?

2020-06-14 07:23发布

问题:

There is a class with generic type:

class Action[T]

Create some instances of it, put in a list:

val list = List(new Action[String], new Action[Int])

Iterate it, and how to get the actual type of the instances?

list foreach { action =>
     // how do I know the action is for a String or an Int?
}

回答1:

Scala erases generic type parameters at compilation, so you would need to have some additional evidence in you object other than what traditional reflection provides. See:

How do I get around type erasure on Scala? Or, why can't I get the type parameter of my collections?

This questions seems to imply there might be some magic to apply in some circumstances:

Accounting for type parameters in a Scala generic class 'equals' method... are manifests the only way?