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

del*_*ber 21 scala

假设我有以下内容

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

}
Run Code Online (Sandbox Code Playgroud)

以下是什么问题?

val mySimple = new SimpleClass(1, "hi")
println(mySimple.myInt)
Run Code Online (Sandbox Code Playgroud)

Kim*_*bel 28

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

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

}
Run Code Online (Sandbox Code Playgroud)

  • 或者将类声明为"case class",在那里你可以免费获得这类东西. (5认同)
  • `case class` 更接近 POJO;有关详细信息,请参阅:http://stackoverflow.com/questions/9673233/how-is-the-pojo-javabean-pattern-treatment-in-scala (2认同)

par*_*tic 20

您的Scala定义的Java等价物是:

public class SimpleClass {
   public SimpleClass( int myInt, String myString ) {
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Kev*_*ght 16

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

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

val mySimple = SimpleClass(1, "hi")
println(mySimple.myInt)
Run Code Online (Sandbox Code Playgroud)

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