当我有一个带有如下变量的抽象类时
abstract class Book {
val id : Int
val name : String
val book : Long
}
在没有类型的情况下声明它们,
abstract class Book {
val id
val name
val book
}
说,错误的值声明。如果可以在没有显式类型注释的情况下声明方法。
abstract class Book {
val id : Int
val name : String
val book : Long
def aMethodWithNoTypeAnnotation
}
为什么变量不能同样工作?这是针对 JVM 的限制吗?
最佳答案
Scala 没有全局类型推断,只有局部类型推断。 val
或 var
的类型被推断为用于初始化它的表达式的类型。抽象的 val
和 var
没有被初始化,所以没有什么可以从中推断出类型。
如果不指定抽象方法的返回类型,则隐含为Unit
。这里没有类型推断。但是 Unit
对于 val
或 var
没有任何意义:Unit
类型的值永远只能有一个,那么为什么要将它存储在变量中呢?
关于java - 为什么抽象变量需要在 Scala 中进行类型注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41727031/