final var
Scala中的 a 有什么用?是什么行为。有没有用例?
(另请参阅,为什么 `private val` 和 `private final val` 不同?,非常接近,但不一样)
final var
Scala中的 a 有什么用?是什么行为。有没有用例?
(另请参阅,为什么 `private val` 和 `private final val` 不同?,非常接近,但不一样)
final
有超载的意义。
它可能意味着“不能在子类中覆盖”,因此final var
.
apm@mara:~$ skala -Yoverride-vars
Welcome to Scala version 2.11.0-20130811-132927-95a4d6e987 (OpenJDK 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.
scala> trait Foo { var v = 7 }
defined trait Foo
scala> trait Bar extends Foo { override var v = 8 }
defined trait Bar
scala> trait Foo { final var v = 7 }
defined trait Foo
scala> trait Bar extends Foo { override var v = 8 }
<console>:8: error: overriding variable v in class Foo$class of type Int;
variable v cannot override final member
trait Bar extends Foo { override var v = 8 }
^
final val i = 7
是一个常量值定义(又名编译时间常量),但val i = 7
不是,与访问修饰符无关。
这已经被引用过,但是,规范的 5.2:
final 修饰符适用于类成员定义和类定义。最终的类成员定义不能在子类中被覆盖。final 类不能被模板继承。final 对于对象定义是多余的。final 类或对象的成员也是隐式的 final,因此 final 修饰符通常对它们来说也是多余的。但是请注意,常量值定义(第 4.1 节)确实需要显式的 final 修饰符,即使它们是在 final 类或对象中定义的。final 不能应用于不完整的成员,并且不能与sealed 组合在一个修饰符列表中。
和 4.1
常量值定义的形式为
final val x = e
其中 e 是一个常量表达式(第 6.24 节)。final 修饰符必须存在,并且不能给出类型注释。对常量值 x 的引用本身被视为常量表达式;在生成的代码中,它们被定义的右侧 e 替换。
编辑:对不起,没有注意到你特别没有问这个问题。孩子们正在准备睡觉,刷牙等等,有点分心。