IntelliJ IDEA 中的 Scala 字符串类型推断

寄生虫

据我了解,在 Scala 中

String 是别名 java.lang.String

为解释在这里,并且可以在可见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 类型的表达式不符合预期的字符串类型”。

但如果我"0"像这样改变

def calc[String](bi: BufferedImage): String = new String("0")

然后我没有收到这样的错误信息。

这是怎么回事?这是预期的行为(如果是,为什么),我做错了什么,还是 Intellij IDEA 中的类型推断错误?

阿列克谢·罗曼诺夫

您的签名calc表示 aPerceptualHash可以将 a 转换为BufferedImage调用者要求的任何类型。例如这样做是合法的

GeneralBinaryStringPerceptualHash.calc[Int](image)

所以String

def calc[String](bi: BufferedImage): String = "0"

只是你给参数起的名字,与标准String类型无关它与

def calc[A](bi: BufferedImage): A = "0"

但是,如果我像这样更改“0”:

def calc[String](bi: BufferedImage): String = new String("0")

然后我没有收到这样的错误信息。

您应该会收到一条不同的错误消息,但您仍然应该收到一条。

可能想要

trait PerceptualHash[A] {
  def calc(bi: BufferedImage): A
}

// calc is already def calc(bi: BufferedImage): String here, no need to override
sealed trait BinaryStringPerceptualHash extends PerceptualHash[String]

反而。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Intellij Scala插件中显示推断的类型

Intellij Idea中的Scala / Java编译顺序

在Intellij Idea中从全局JAR文件搜索字符串

如何停止IntelliJ IDEA在JavaScript中拆分字符串?

Intellij Idea:在Java字符串中搜索?

Intellij-idea反向粘贴到字符串中(又名从字符串中复制)?

如何在IntelliJ IDEA中关闭具有单位返回类型的Scala自动完成功能?

如何在IntelliJ IDEA中为Scala配置代码样式

Scala工作表不评估IntelliJ IDEA 2016.2中的对象

无法在Intellij Idea中为scala项目运行集成测试

对IntelliJ IDEA中的Scala / sbt项目推荐.gitignore?

使用Intellij Idea在Scala中生成返回类型签名

Scala + Play + Intellij IDEA问题

IntelliJ IDEA - Get 无法解析“字符串”中的方法“isBlank”,但在 STS 中工作正常

如何在IntelliJ Idea中更改字符串拆分样式?

查看IntelliJ IDEA中assertEquals的区别以获取长字符串

如何在IntelliJ IDEA中从具有推断类型的变量导航到Kotlin类型声明?

.idea文件在intellij中

如何在Intellij IDEA 11中的单个模块中设置Java和Scala?

在Intellij Idea中的编辑器中启用类型信息

Intellij的Scala类型推断与REPL不同

IntelliJ IDEA / Scala-无法读取资源

为 Scala/SBT 设置 IntelliJ IDEA Ultimate

Intellij Idea - Scala 使用什么配置

在Intellij IDEA中创建Scala项目时无法查看Dotty选项

IntelliJ Idea无法解析Scala托管源中的符号(sbt-buildinfo)

在 IntelliJ IDEA 中创建新项目时已安装 Scala 插件但未显示

IntelliJ Idea中的scala:显示不同的不可变(val)与可变(var)变量?

将Intellij Idea Scala静态分析规则导出到scalastyle_configuration文件中