我正在尝试实现一个简单的子类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无法正确识别类型.
因为我可以得到以下代码来编译:
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,而是一个未知的参数化类型(如T或A).因此,当您编写时[String],这意味着某些未知类型将由实现类而不是您想要的String类型确定.