即。是否可以创建一个不能从类外部分配的var?
答案 0 :(得分:14)
现在,不,没有办法做到这一点。
您仅限于以下三线解决方案:
class Hider {
private[this] var xHidden: Int = 0
def x = xHidden
private def x_=(x0: Int) { xHidden = x0 }
}
现在,类本身是唯一可以操作基础字段xHidden
的人,而类的其他实例可以使用setter方法,每个人都可以看到getter方法。
如果你不介意使用不同的名字,你可以将var设为私有而忘记设置者(两行)。
没有“var to me,val to they”关键字。
答案 1 :(得分:4)
您可以执行以下操作:
class Test {
private var myprivatevar = ""
def publicvar = myprivatevar
}
在其他课程中,您只能使用publicvar
,因为没有publicvar_=
方法,您无法从外部分配。
答案 2 :(得分:-1)
你肯定会创建一个var,然后将它作为定义该字段的类的私有。
scala> class Holder(private var someValue: String) {
| def getValueOfOther(other: Holder) = other.someValue
| def combinedWith(holder: Holder) = new Holder(holder1.someValue + " " + holder2.someValue)
| def value = someValue
| }
defined class Holder
scala> val holder1 = new Holder("foo")
holder1: Holder = Holder@1303368e
scala> val holder2 = new Holder("bar")
holder2: Holder = Holder@1453ecec
scala> holder2.getValueOfOther(holder1)
res5: String = foo
scala> val holder3 = holder1 combinedWith holder2
holder3: Holder = Holder@3e2f1b1a
scala> holder3.value
res6: String = foo bar