字符串文字不解释为String类型

chi*_*ong 3 string scala

我正在尝试实现一个简单的子类Iterable[String],我遇到的东西对我来说似乎有点奇怪.我的代码如下:

class ItString[String] extends Iterable[String]{
    override def iterator: Iterator[String] = new Iterator[String] {
        def hasNext = true
        def next = "/"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Hug*_*ira 5

因为我可以得到以下代码来编译:

class ItString extends Iterable[String] {
  override def iterator: Iterator[String] = new Iterator[String] {
    def hasNext = true
    def next = "/"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

class ItString[String] extends ...
Run Code Online (Sandbox Code Playgroud)

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