字符串文字不解释为String

时间:2015-07-20 23:23:41

标签: string scala

我试图实现Iterable[String]的简单子类,我遇到了一些对我来说有点奇怪的事情。我的代码如下:

class ItString[String] extends Iterable[String]{
    override def iterator: Iterator[String] = new Iterator[String] {
        def hasNext = true
        def next = "/"
    }
}

我的IDE抱怨它期待String,但它实际上是String类型,并且在尝试编译时,它进一步显示问题是它需要String但文字实际上是java.lang.String类型。现在,我可以通过将其更改为"/".asInstanceOf[String]来解决此问题,但我想知道为什么Scala无法正确识别该类型。

1 个答案:

答案 0 :(得分:5)

因为我可以得到以下内容来编译:

class ItString extends Iterable[String] {
  override def iterator: Iterator[String] = new Iterator[String] {
    def hasNext = true
    def next = "/"
  }
}

我可以推断出你的问题是写作:

class ItString[String] extends ...

发生的事情是String的出现并未引用类型java.lang.String,而是一种未知的参数化类型(如TA )。因此,当您编写[String]时,这意味着某些未知类型将由实现类决定,而不是您想要的String类型