gpt4 book ai didi

构造函数中的Scala最终变量

转载 作者:行者123 更新时间:2023-12-04 16:29:52 26 4
gpt4 key购买 nike

我对 Scala 还是很陌生,但我知道您可以定义在构造函数中初始化的类变量,例如

class AClass(aVal: String)

这就像在 java 中执行以下操作
class AClass {
private String aVal;

public AClass(String aVal) {
this.aVal = aVal;
}
}

在 Java 中,我将 aVal 声明为 final。有没有办法让 Scala 语法中的 aVal 变量成为最终变量?

编辑:这是我在编译以下 Scala 类时看到的内容:
class AClass(aVal: String) {
def printVal() {
println(aVal)
}
}

我跑了 javap -private并得到了输出
public class AClass extends java.lang.Object implements scala.ScalaObject{
private final java.lang.String aVal;
public void printVal();
public AClass(java.lang.String);
}

当我将 scala 类定义更改为 class AClass(**val** aVal: String)我从 javap -private 得到以下输出
public class AClass extends java.lang.Object implements scala.ScalaObject{
private final java.lang.String aVal;
public java.lang.String aVal();
public void printVal();
public AClass(java.lang.String);
}

公共(public)方法 aVal生成。我仍然在这里学习 - 任何人都可以解释为什么会产生这种情况吗?

注意我使用的是 scala 2.9

最佳答案

class AClass(aVal: String)

在此代码中,aVal 是最终变量。所以你已经有了一个最终变量。
class AClass(val aVal: String)

在这段代码中,aVal 是最终的,你有 aVAL 的 getter。所以你可以像下面这样使用它
scala> val a= new AClass("aa")
a: A1 = A1@1d7d58f

scala> a.aVal
res2: String = aa

最后,
class AClass(var aVal: String)

在这段代码中,aVal 不是最终的,你有 aVal 的 getter 和 setter。所以你可以像下面这样使用它
scala> val a= new AClass("aa")
a: AClass = AClass@1c059f6

scala> a.aVal
res3: String = aa

scala> a.aVal = "bb"
a.aVal: String = bb

scala> a.aVal
res4: String = bb

关于构造函数中的Scala最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com