如何将以下Java代码转换为Scala?
class ClassA {
private int field1;
private int field2;
public ClassA() {
field1 = 1;
field2 = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到两个选项:
class ClassA(val field1: Int, val field2: Int) {
....
}
Run Code Online (Sandbox Code Playgroud)
要么
class ClassA {
val field1: Int = 1
val field2: Int = 2
}
Run Code Online (Sandbox Code Playgroud)
推荐什么,为什么?
Lan*_*dei 18
从Java到Scala没有简单的转换,它取决于上下文:
你看,有很多考虑因素.我建议学习Scala的可能性,并尝试不同的方法,否则你会陷入"Scala as better Java"陷阱的时间超过需要.
这是对Scala最直接的翻译:
class ClassA{
private var field1 = 1
private var field2 = 2
}
Run Code Online (Sandbox Code Playgroud)
注意使用var而不是val.val是一个不可变字段,对应public final于Java.因此,以后不能对其进行更改,并且提供将这样的字段初始化为给定实例的正确值的方法很重要.
为了决定你想要使用什么,你应该问自己Landei答案中列出的问题.
两者之间最大的区别是类参数one可以用作构造函数.如果你想让构造函数没有参数,那么你需要使用第二个,再加上@Debilski建议的private修饰符.
另一种选择是在构造函数中使用默认参数.这样,如果需要,可以更改字段:
class ClassA (private val field1: Int = 1, private val field2: Int = 2)
// Using defaults
val a = new ClassA
// Setting new values
val b = new ClassA(3, 4)
Run Code Online (Sandbox Code Playgroud)
如果你想拥有私有字段,为什么不将它们声明为私有呢?
class ClassA {
private val field1: Int = 1
private val field2: Int = 2
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27225 次 |
| 最近记录: |