Scala中var和val的内部实现是什么?有兴趣知道他们的实现的细节 - 是什么使var变为"var"如何实现可变结构vs val(更像是最终的)结构,这使得它是不可变的.
Dyl*_*lan 12
首先我创建Test.scala
:
class Test {
val x = 1
var y = 2
}
Run Code Online (Sandbox Code Playgroud)
通过scalac Test.scala
生成编译它Test.class
,然后javap -p Test.class
用来获取
public class Test {
private final int x;
private int y;
public int x();
public int y();
public void y_$eq(int);
public Test();
}
Run Code Online (Sandbox Code Playgroud)
所以你可以看到它val x
成为了private final
类中的一个字段,也是一个public final
返回该值的方法.
var y
成为一个非最终的私人领域,以及一个吸气者+二传手.这y_$eq(int)
是制定者.在scala中,那就是def y_=(newY: Int): Unit
.Scala的语法糖将转化y = someValue
为调用y_=(someValue)
.
归档时间: |
|
查看次数: |
242 次 |
最近记录: |