字符串字面值未被解释为字符串类型

标签 string scala

我正在尝试实现 Iterable[String] 的一个简单子(monad)类,但我遇到了一些对我来说似乎有点奇怪的事情。我的代码如下:

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 无法正确识别类型。

最佳答案

因为我可以编译以下内容:

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键入您想要的

关于字符串字面值未被解释为字符串类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31527934/

相关文章:

JAVA:空格分隔字符串中的所有非数字字符

string - 使用循环遍历字符串并检查 char 作为字典键

c - 在 C 中查找字符串长度的问题

java - AWS S3 : Uploading large file fails with ResetException: Failed to reset the request input stream

java - 将句子旋转 n 个单词

c - 为什么我的 while(read) 管道循环永远不会结束?

java - 使用 Scala 实现跨越一系列基于 Java 的服务的领域层

java - 哪些语言支持 Lenses 或类似的方式来更新不可变的嵌套结构?

scala - 引用类型参数的抽象类型成员

json - 获取案例类的具体类型