【发布时间】:2015-09-09 16:45:51
【问题描述】:
final 对 Scala 构造函数参数意味着什么?我有这个例子:
class IntFinalTest(
val intVal: Int,
final val finalIntVal: Int,
var intVar: Int,
final var finalIntVar: Int) {
// intVal = 3 // error: reassignment to val
// finalIntVal = 3 // error: reassignment to val
intVar = 3
finalIntVar = 3
}
class ArrayFinalTest(
val arrayVal: Array[Int],
final val finalArrayVal: Array[Int],
var arrayVar: Array[Int],
final var finalArrayVar: Array[Int]) {
arrayVal(0) = 3
finalArrayVal(0) = 3
arrayVar(0) = 3
finalArrayVar(0) = 3
}
从编译器输出判断(只有两个标记的行会导致错误),final 和非final vals 和vars 之间没有区别 - 这是正确的吗?我通过运行此示例验证了除intVal 和finalIntVal 之外的所有变量都被修改了。
相关问题 RQ1:final 在属于层次结构的类的构造函数中是否有任何意义?
相关问题 RQ2:如果 Array[Int] 是构造函数参数列表的一部分,我如何创建不可变的类成员?
上下文:我使用 Scala 2.10.5,并且只有几个月的使用经验。
【问题讨论】:
-
我猜,
final表示它不能被覆盖。 (你知道,val arrayVal创建了一个可以被覆盖的方法。) -
Array[Int]- 总是可变的。试试Seq[Int] -
@ArseniyZhizhelev 这应该是一个答案。
-
我扩展了标题以反映相同的规则适用于类/特征/对象成员,正如 Jörg W Mittag 所指出的那样
标签: scala constructor final