I'm still pretty new to Scala, but I know you can define class variables that are initialized in the constructor like
class AClass(aVal: String)
which would be like doing the following in java
class AClass {
private String aVal;
public AClass(String aVal) {
this.aVal = aVal;
}
}
In Java, I would declare aVal as final. Is there a way to make the aVal variable final in the Scala syntax?
EDIT: Here is what I am seeing when I compile the following Scala class:
class AClass(aVal: String) {
def printVal() {
println(aVal)
}
}
I ran javap -private
and got the output
public class AClass extends java.lang.Object implements scala.ScalaObject{
private final java.lang.String aVal;
public void printVal();
public AClass(java.lang.String);
}
When I change the scala class definition to have class AClass(**val** aVal: String)
I get the following output from 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);
}
The public method aVal
is generated. I'm still learning here - can anyone explain why that is generated?
Note I am using scala 2.9
class AClass(aVal: String)
In this code, aVal is a final variable. So You already have a final variable.
class AClass(val aVal: String)
In this code, aVal is final and you have getter of aVAl. So you can use it like below
scala> val a= new AClass("aa")
a: A1 = A1@1d7d58f
scala> a.aVal
res2: String = aa
And finally,
class AClass(var aVal: String)
In this code, aVal is not final and you have getter and setter of aVal. So you can use it like below
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