如何在Scala中使用POJO等效项?

时间:2011-07-17 09:09:03

标签: scala

假设我有以下

class SimpleClass (myInt: Int, myString: String) {

}

以下是什么问题?

val mySimple = new SimpleClass(1, "hi")
println(mySimple.myInt)

4 个答案:

答案 0 :(得分:28)

如果您希望构造函数参数作为类的字段可用,则必须将它们声明为墙或变量:

class SimpleClass (val myInt: Int, val myString: String) {

}

答案 1 :(得分:21)

Scala定义的java等价物是:

public class SimpleClass {
   public SimpleClass( int myInt, String myString ) {
   }
}

没有奇迹它不起作用......

嘿老兄,这是你的第17个scala问题,你仍然对语言的基础知识感到困扰。也许你应该花一个下午阅读一些在线教程(或一些书)来巩固你的知识。我可以建议:

答案 2 :(得分:16)

对于完整的POJO体验™,包括toString的相等,hashCodes和理智的实现......你需要案例类:

case class SimpleClass(myInt: Int, myString: String)

val mySimple = SimpleClass(1, "hi")
println(mySimple.myInt)

案例类的参数自动变为val。如果你愿意的话,可以明确地将它们变成vars,但是这种事情在Scala中通常是不受欢迎的 - 其中不可变对象受到青睐。

答案 3 :(得分:3)

问题是您正在调用SimpleClass.myInt getter方法,但是您没有在任何地方定义getter方法。您需要定义SimpleClass.myInt getter方法,甚至更好,让Scala自动为您定义:

class SimpleClass(val myInt: Int, myString: String) {}