![]() |
1
38
你可以做:
|
![]() |
2
29
Java解决方案实际上是解决并非所有表达式都返回值的问题的解决方案,因此您不能用Java编写:
Java越来越倾向于使用三元运算符:
这对于有限的用例来说是好的,但是一旦开始处理switch语句和多个构造函数,就完全站不住脚了。
Scala的方法在这里是不同的。所有对象构造最终都必须通过一个“主”构造函数,所有表达式都返回一个值(即使它是
您还需要注意的是,在单独的操作中声明和定义变量通常是处理多个线程时的一种错误做法,并且可能会使您在最不期望的情况下暴露空值和竞争条件(尽管这在对象构造过程中并不是真正的问题)。不可变值的原子化创建只是函数式语言帮助处理并发性的一个方面。 这也意味着Scala编译器可以避免Java语言规范中一些极其复杂的流分析。 如前所述,Scala方法是:
有了一点Scala的经验,你会发现这种风格有助于编译器帮助你,你应该发现自己编写的程序有更少的bug! |
![]() |
3
9
使用
|
![]() |
4
7
除了其他人所说的,请注意Java允许“blank final”“variables”,这是我有点怀念的特性:
|
![]() |
5
3
因为“val”的目的是向读取器(和编译器)发送信号: “此值将保持初始化时的值,直到它不存在为止” 如果没有初始化,这就没有多大意义。 当然,我们可以想出一些像val(3)这样的东西,它允许一个变量有三个赋值,但我认为这没有多大用处。 |
![]() |
Emanuel Pinho · 无不变目标push的角度变化检测策略 7 年前 |
![]() |
MingtyeP · 如何使用不可变js取消移动列表中的每个元素? 7 年前 |
![]() |
Brannon · 让赋值运算符在申报时工作 7 年前 |
![]() |
Javallion · JAVA中的不可变对象初始化 7 年前 |
![]() |
Ankush Pandit · 字符串与字符串数组元素之间的比较 7 年前 |
![]() |
plamkata__ · Swift到Kotlin,管理不可变列表 7 年前 |