【发布时间】:2014-03-03 12:47:30
【问题描述】:
以下 Scala 代码,使用 recursive type A 无法编译:
package reflection.scala.stackOverflow
import scala.reflect.runtime.universe._
class A[T<:A[T]]
class Question(root:A[_]) {
val rtmMirror =runtimeMirror(getClass.getClassLoader)
val instanceMirror : InstanceMirror =rtmMirror.reflect(root)
}
它给出以下编译错误:
Error:(9, 50) type arguments [_$1] do not conform to class A's type parameter bounds [T <: reflection.scala.stackOverflow.A[T]]
val instanceMirror : InstanceMirror =rtmMirror.reflect(root)
^
Error:(9, 57) type arguments [_$1] do not conform to class A's type parameter bounds [T <: reflection.scala.stackOverflow.A[T]]
val instanceMirror : InstanceMirror =rtmMirror.reflect(root)
^
为什么编译失败?
这里的类型参数 $1 是什么?
1 美元从何而来?
为什么 $1 不符合 A 的类型参数界限?
如何修改此代码以便在编译时将
root的类型检查保留为A的类型?
【问题讨论】:
标签: scala reflection types recursive-datastructures