【发布时间】:2018-04-17 02:50:00
【问题描述】:
据我所知,在 Scala 中
String是java.lang.String的别名
正如here 解释的那样,可以在Predef.scala 中看到:
type String = java.lang.String
所以本质上,它们是相同的。
但是,在 IntelliJ IDEA 2017.2.5 中,以下代码会产生错误:
trait PerceptualHash {
def calc[A](bi: BufferedImage): A
}
sealed trait BinaryStringPerceptualHash extends PerceptualHash {
override def calc[String](bi: BufferedImage): String
}
private object GeneralBinaryStringPerceptualHash extends BinaryStringPerceptualHash {
def calc[String](bi: BufferedImage): String = "0"
}
这里,"0" 带有下划线,并带有消息“java.lang.String 类型的表达式不符合预期的 String 类型”。
但如果我像这样更改"0":
def calc[String](bi: BufferedImage): String = new String("0")
然后我没有收到这样的错误消息。
发生了什么事?是预期的行为(如果是,为什么),是我做错了什么,还是 Intellij IDEA 中的类型推断错误?
【问题讨论】:
标签: string scala intellij-idea type-inference