有没有更好的方法来测试 Scala 中的泛型类型(没有类型参数)?
Is there a better way to test the generic type (without type arguments) in Scala?
鉴于我正在使用反射来遍历成员列表(给我 runtime.universe.Symbol
),我如何在没有类型参数的情况下检查泛型类型?换句话说,无论类型参数是什么,我如何找到 List[]
泛型类型的成员?
目前我正在使用这种确实有效的方法,但我想知道是否有更好的方法:
import scala.reflect.runtime.currentMirror
// ...
val listTypeConstructor = typeOf[List[_]].typeConstructor
val myListMembers = currentMirror.reflect(MyObject)
.symbol
.asClass
.typeSignature
.members
.filter(member => member.typeSignature.resultType.typeConstructor == listTypeConstructor)
这会生成所有 List[]
成员的 runtime.universe.Symbol
列表,包括预期的任何 List[String]
、List[Int]
等。
typeOf[List[_]].typeConstructor
的用法对我来说似乎有点混乱。这是执行此类过滤的最佳方法吗?
答案是否定的。我在上面的例子中的方式是标准方式。
鉴于我正在使用反射来遍历成员列表(给我 runtime.universe.Symbol
),我如何在没有类型参数的情况下检查泛型类型?换句话说,无论类型参数是什么,我如何找到 List[]
泛型类型的成员?
目前我正在使用这种确实有效的方法,但我想知道是否有更好的方法:
import scala.reflect.runtime.currentMirror
// ...
val listTypeConstructor = typeOf[List[_]].typeConstructor
val myListMembers = currentMirror.reflect(MyObject)
.symbol
.asClass
.typeSignature
.members
.filter(member => member.typeSignature.resultType.typeConstructor == listTypeConstructor)
这会生成所有 List[]
成员的 runtime.universe.Symbol
列表,包括预期的任何 List[String]
、List[Int]
等。
typeOf[List[_]].typeConstructor
的用法对我来说似乎有点混乱。这是执行此类过滤的最佳方法吗?
答案是否定的。我在上面的例子中的方式是标准方式。