【发布时间】:2014-09-04 01:54:01
【问题描述】:
我正在实现(Int) => String) 的派生并覆盖toString 方法,如下所示:
object A extends ((Int) => String) {
override def toString: String = "A"
def apply(int: Int): String = int.toString
}
IDEA IntelliJ 表示 toString 方法被 Function1.toString 覆盖(Scala IDE 也是如此)。并且 IntelliJ 还显示以下警告,表明必须将空括号添加到 toString 方法,因为 Function1.toString 声明包括空括号(Scala IDE 不显示此警告):
空括号 Scala 方法被重写为无参数
惯例是,如果方法有边,则包含括号 效果。根据 Liskov 替换原理,如 覆盖方法是空括号,覆盖方法也必须是 声明为具有副作用的方法。 * 参考编程 Scala,5.3 运算符是方法
然后我去了 ScalaDoc 并检查了 scala 包中的 Function1 (source)、Function2 (source) 和 PartialFunction (source)。在 2.11.2 的源代码中,Function1 和 Function2 都覆盖了 toString 方法并包含空括号(而 PartialFunction 只是使用 Function1 的覆盖)。所以,鉴于Function1 和Function2 都为toString 方法声明了String 文字,我不明白为什么括号会包含在这两个类文件的源代码中。
我遗漏了什么明显的东西来证明在 toString 方法上使用括号是合理的?还是 IntelliJ 警告不正确?或者如果 IntelliJ 警告是正确的,为什么 Scala IDE 没有显示与 IntelliJ 相同的警告?
【问题讨论】:
标签: function scala tostring scala-ide intellij-13