加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么允许scala中的最终变量更改值

发布时间:2020-12-16 18:26:13 所属栏目:安全 来源:网络整理
导读:为什么允许 Scala中的最终变量更改值.根据我的理解,一旦宣布最终,他们不应该被允许改变. class foo(){ final var name = "abc" name = "xyz" // why this is allowed} 解决方法 每 Scala Specification的最终定义(强调我的): 5.2.6最终 The final modifier
为什么允许 Scala中的最终变量更改值.根据我的理解,一旦宣布最终,他们不应该被允许改变.

class foo()
{
  final var name = "abc"
  name = "xyz" // why this is allowed
}

解决方法

每 Scala Specification的最终定义(强调我的):

5.2.6最终

The final modifier applies to class member definitions and to class definitions.
A final class member definition may not be overridden in subclasses. A
final class may not be inherited by a template. final is redundant for
object definitions. Members of final classes or objects are implicitly
also final,so the final modifier is generally redundant for them,
too. Note,however,that constant value definitions do require an
explicit final modifier
,even if they are defined in a final class or
object. final may not be applied to incomplete members,and it may not
be combined in one modifier list with sealed.

由于Scala中的val定义已经意味着对它的引用是不可变的(与Java不同),因此在定义它时不必明确指定它.如果希望将值作为字节代码中的常量内联,则可以指定添加最终修饰符.

根据var,final在这里仅表示“可能不会在子类中被覆盖”,但是对变量的不变性没有任何说明:

scala> :pa
// Entering paste mode (ctrl-D to finish)

class Foo {
  final var name = "abc"
}

class Bar extends Foo {
  override var name = "yuval"
}

// Exiting paste mode,now interpreting.

<console>:16: error: overriding variable name in class Foo of type String;
 variable name cannot override final member
             override var name = "yuval"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读