如何在Scala中创建只有空构造函数的POJO类?

如何在Scala中创建只有空构造函数的POJO类?,scala,pojo,Scala,Pojo,我想在Scala中创建只有默认空构造函数的POJO类。在java中,是这样的: public class Foo { private String name; private String address; ... //and the public getter/setter below... } case class Foo(var name: String, var address: String, ...) 在scala中,我看到您可以像这样创建P

我想在Scala中创建只有默认空构造函数的POJO类。在java中,是这样的:

public class Foo {
    private String name;

    private String address;

    ...

    //and the public getter/setter below...
}
case class Foo(var name: String, var address: String, ...)
在scala中,我看到您可以像这样创建POJO:

public class Foo {
    private String name;

    private String address;

    ...

    //and the public getter/setter below...
}
case class Foo(var name: String, var address: String, ...)
但是在我的例子中,这个类将有许多属性(大约50+),我认为用50个构造函数参数实例化这个类不适合这种情况

更新:

此外,还可以设置类的属性值(它不是只读的)。这就是我期望POJO类的用途:

val foo = new Foo()
foo.name = "scala johnson"
foo.address = "in my sweeet dream, oh yeah"
...

如果您不需要使用参数化构造函数实例化类,并且您将拥有许多属性,那么您可能需要一个对象(静态属性和方法的集合)或一个非case类

对象的示例:

object Foo {
  val someString = "one"

  val someNumber = 42.5    
}
也可以有一个非案例类。您可以拥有一个没有参数的类,尽管我不确定在这种情况下您为什么想要拥有一个类:

class Foo {
  val someString = "one"
  val someNumber = 42.5
}
你这样称呼他们:

val myObjectString = Foo.someString

val myClass = new Foo
val myClassNumber = myClass.someNumber

如果您不需要使用参数化构造函数实例化类,并且您将拥有许多属性,那么您可能需要一个对象(静态属性和方法的集合)或一个非case类

对象的示例:

object Foo {
  val someString = "one"

  val someNumber = 42.5    
}
也可以有一个非案例类。您可以拥有一个没有参数的类,尽管我不确定在这种情况下您为什么想要拥有一个类:

class Foo {
  val someString = "one"
  val someNumber = 42.5
}
你这样称呼他们:

val myObjectString = Foo.someString

val myClass = new Foo
val myClassNumber = myClass.someNumber
那么:

class C {
  var p1:String = _
  var p2:Int = _
}
那么:

class C {
  var p1:String = _
  var p2:Int = _
}


这并不符合scala代码的精神,但是您可以做一些类似于
class Foo{private var bar:String=null}
@BenReich:很抱歉我的问题不清楚。类的属性值可以在类定义之外设置,所以我不能将属性设置为
private
。POJO代表“普通的旧Java对象”,所以它不应该是POSO吗?@jhegedus给出了答案,但值得强调的是,这不是scala风格
case类
es鼓励您在构造时完全初始化对象,这样它们就永远不会处于无效状态,这会降低出错的可能性(并且使用
。复制
而不是修改会鼓励您获得正确的数据流)。当然要慢慢来,但一定要学会scala的做事方式——毕竟,学习一门语言不会改变你的思维方式是毫无意义的。@Imm:我不知道使用
case class
是否有道理的。如果有50个属性,这意味着50个构造函数参数。这将是我有生以来遇到的最长的类初始化代码行。这与现有scala代码的精神不符,但您可以执行类似于
class Foo{private var bar:String=null}
@BenReich:很抱歉我的问题不清楚。类的属性值可以在类定义之外设置,所以我不能将属性设置为
private
。POJO代表“普通的旧Java对象”,所以它不应该是POSO吗?@jhegedus给出了答案,但值得强调的是,这不是scala风格
case类
es鼓励您在构造时完全初始化对象,这样它们就永远不会处于无效状态,这会降低出错的可能性(并且使用
。复制
而不是修改会鼓励您获得正确的数据流)。当然要慢慢来,但一定要学会scala的做事方式——毕竟,学习一门语言不会改变你的思维方式是毫无意义的。@Imm:我不知道使用
case class
是否有道理的。如果有50个属性,这意味着50个构造函数参数。这将是我一生中遇到的最长的类疯狂代码行。很抱歉我的问题不清楚。类的属性值可以设置,所以我不能使用
val
@suud然后用
var
替换
val
(虽然我不建议这样做-如果需要可变传输对象aka'bean',可能需要修改模型)是的,一般来说,应该尽量避免使用
var
,所以,如果你需要<代码> var >代码>,你应该考虑重新设计你的类。但您可以将
var
用作类或对象成员,这并不是禁止的。很抱歉我的问题不清楚。类的属性值可以设置,所以我不能使用
val
@suud然后用
var
替换
val
(虽然我不建议这样做-如果需要可变传输对象aka'bean',可能需要修改模型)是的,一般来说,应该尽量避免使用
var
,所以,如果你需要<代码> var >代码>,你应该考虑重新设计你的类。但您可以将
var
用作类或对象成员,这是不被禁止的。下划线是什么意思?默认值分配,请参阅SLS了解更多详细信息:下划线是什么意思?默认值分配,请参阅SLS了解更多详细信息: