Geo*_*org 1 inheritance types scala
在Scala 2.11.5中,编译它
object Tryout {
trait A {
def method(a: Int): Boolean
}
abstract class B extends A {
def method(a: Int) = ???
}
new B {
override def method(a: Int) = true // type mismatch here
}
}
Run Code Online (Sandbox Code Playgroud)
在"真实"处产生"类型不匹配:找到布尔值,需要无效".如果我???用true或false 替换它,它会编译.如果我在抽象类中指定"方法"的结果类型,它也会编译.
这不是一个大问题.但是我很好奇是否有人可以解释为什么???没有正确推断为布尔值?
Scala允许您在子类中使继承方法的返回类型更具限制性.
abstract class A {
def foo: Any
}
abstract class B {
def foo: Int
}
new B {
def foo = 1
}
Run Code Online (Sandbox Code Playgroud)
所以当你声明def method(a: Int) = ???时B,???推断为Nothing,因为scala编译器不知道你是否想要Boolean或Nothing.这是明确声明返回类型总是一个好主意的原因之一.