java - 为什么抽象变量需要在 Scala 中进行类型注释?

标签 java scala

当我有一个带有如下变量的抽象类时

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 没有全局类型推断,只有局部类型推断。 valvar 的类型被推断为用于初始化它的表达式的类型。抽象的 valvar 没有被初始化,所以没有什么可以从中推断出类型。

如果不指定抽象方法的返回类型,则隐含为Unit。这里没有类型推断。但是 Unit 对于 valvar 没有任何意义:Unit 类型的值永远只能有一个,那么为什么要将它存储在变量中呢?

关于java - 为什么抽象变量需要在 Scala 中进行类型注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41727031/

相关文章:

swing - Scala Wrapper 类通过扩展 Component 和 SequentialContainer.Wrapper 特征,我对特征有正确的理解吗?

scala - 如何创建可以参数化创建某种类型的子类型实例的 Scala 函数

java - 在java中用空格标记一个字符串

java - 如何为新的警报对话框设置参数?

java - 在 Code39Bean 中禁用条形码图像下方的文本

scala - 如何向 Java 提供 Scala 伴随对象的类?

scala - Spark 数据帧到嵌套映射

scala - 找不到错误值spark import spark.implicits._ import spark.sql

java - 删除非级联的自引用实体

java - Maps数据结构的 map