scala – 如何将构造函数变量(sic!)公开为只读?
发布时间:2020-12-16 08:59:22 所属栏目:安全 来源:网络整理
导读:我有关于 Scala的这个相当简单的问题.鉴于我必须遵循类定义: class Foo(var bar: Int) 能够构造Foo实例的代码必须能够传递bar的初始值.但是如果我将bar定义为var,那么User也可以在运行时更改其值,这不是我想要的.用户应该只能阅读栏. bar本身在内部被修改,
我有关于
Scala的这个相当简单的问题.鉴于我必须遵循类定义:
class Foo(var bar: Int) 能够构造Foo实例的代码必须能够传递bar的初始值.但是如果我将bar定义为var,那么User也可以在运行时更改其值,这不是我想要的.用户应该只能阅读栏. bar本身在内部被修改,因此val不是一个选项. 解决方法
对于属性的只读很简单,只需创建一个没有相应setter的getter方法.私人可修改的领域也很容易.
您最大的挑战是共享命名空间,您希望能够使用相同的名称: >构造函数参数 遗憾的是,这是不可能的,你需要为每个角色都有一个独特的名称……这样的事情: class Bippy(bop0: Int) { private[this] var privatebop = bop0 //privatebop is ONLY EVER used by the following getter and setter: private def bop_=(x:Int) = privatebop = x def bar = privatebop } 如果您不关心使用命名参数,或者使用Scaladoc中的参数名称,那么可以进一步缩短: class Bippy(private[this] var privatebop) { //privatebop is ONLY EVER used by the following getter and setter: private def bop_=(x:Int) = privatebop = x def bop = privatebop } UPDATE 可以说,最干净的方法是给你一个命名参数,它是将工厂与上述技术之一结合起来: object Bippy{ def apply(bop: Int) = new Bippy(bop) } 然后可以将其称为Bippy(42).与常规构造函数相同,但没有new关键字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |