我试图在匿名类中声明参数化类型的属性。这部作品在Java中,斯卡拉(2.9),但我得到的编译错误:在Scala中的匿名类中使用类型参数
Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
这是代码:
object DemoFail extends App {
def it[T <: AnyRef](x: T) = new Iterator[T] {
var i = x // here is the error
def next = i
def hasNext = true
}
for (i ← it(int2Integer(4))) println(i)
}
我可以得到它的“擦除”手动类型的工作:
object DemoOK extends App {
def it[T <: AnyRef](x: T) = new Iterator[T] {
var i: AnyRef = x
def next = i.asInstanceOf[T]
def hasNext = true
}
for (i ← it(int2Integer(4))) println(i)
}
所以问题是:为什么编译器不能为我做?
通过向您的迭代器添加公共变量,您可以创建一个结构类型,它是Iterator的子类型。如果您将我更改为一个私有变量,它将起作用。 – 2011-05-29 21:59:02
事实上,我不知道我怎么会错过这样一个明显的解决方案。 – 2011-05-29 23:54:35
@Kris:请回答以下答案,以便我可以正确接受它。 – 2011-05-29 23:55:44