在Scala中创建对象并将其添加到列表

时间:2019-03-09 10:42:20

标签: java scala

我是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);

} 

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用case class

case class Foo(x: Int, y: Int)

class Main {
   def main(args: Array[String]) = {
     val myList = List(Foo(10, 20))
   }
}

但是,此代码未提供修饰符setXsetY。原因是在Scala中,您通常创建新对象而不是更新旧对象。这样可以使对象保持“不变”,并使代码更清晰,更安全。

因此,您无需调用foo.setX(4),而是使用更新后的x值创建一个新的foo:

val newFoo = foo.copy(x = 4)

习惯以这种方式编写代码需要花费一些时间,但是Scala的功能有助于简化此过程(例如,上面的copy方法)。生成的代码更安全,更易于理解,因为您知道xy不会改变。

这也鼓励了一种更具功能性的样式,其中输入值通过一系列函数转换为输出值。这与命令式风格相反,在命令式风格中,输入对象通过将其转化为输出对象的方法进行了变异。

答案 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
    }
}