我是Scala的新手,但是我一直坚持创建对象并将其添加到Scala的Object列表中。我想在scala中执行以下java实现。请提出合适的方法。
class Foo {
private int x;
private int y;
public Foo(int x, int y){
this.x = x;
this.y = y;
}
public int getX(){
return x;
}
public void setX(int x){
this.x = x;
}
public int getY(){
return y;
}
public void setY(int y){
this.y = y;
}
}
class Main {
List<Foo> fooList = new ArrayList<>();
Foo foo = new Foo(1,2);
fooList.add(foo);
}
答案 0 :(得分:2)
最简单的方法是使用case class
:
case class Foo(x: Int, y: Int)
class Main {
def main(args: Array[String]) = {
val myList = List(Foo(10, 20))
}
}
但是,此代码未提供修饰符setX
和setY
。原因是在Scala中,您通常创建新对象而不是更新旧对象。这样可以使对象保持“不变”,并使代码更清晰,更安全。
因此,您无需调用foo.setX(4)
,而是使用更新后的x值创建一个新的foo:
val newFoo = foo.copy(x = 4)
习惯以这种方式编写代码需要花费一些时间,但是Scala的功能有助于简化此过程(例如,上面的copy
方法)。生成的代码更安全,更易于理解,因为您知道x
和y
不会改变。
这也鼓励了一种更具功能性的样式,其中输入值通过一系列函数转换为输出值。这与命令式风格相反,在命令式风格中,输入对象通过将其转化为输出对象的方法进行了变异。
答案 1 :(得分:-3)
尝试以下代码;有用。
class Foo(a: Int, b: Int) {
var thisA: Double = a
var thisB: Double = b
}
class Main {
def main(args: Array[String]) = {
var myList= List[Foo]()
val listObject= new Foo(10,20)
myList::= listObject
}
}