在Java中,我知道定义具有4个或5个以上参数的构造函数或方法是不好的。
在Scala中,首选使用val
而不是var
。
我的课程有很多字段(比如7个字段或10个字段)。
实例化后,大多数字段都不会更改。
所以我正在尝试将val
用于这些字段。
但是,在我能想到的类中初始化val
的唯一方法是将它们传递给主构造函数。
class Person(
val name: String,
val gender: String,
val age: Int,
val height: Double,
val weight: Double,
val birthday: Date,
val address: String) {
def printInfo(): Unit = {
...
}
...
}
但是这样,主构造函数看起来很难看。不仅是它的定义,还要调用构造函数。
val person = new Person(
parser.getName(), parser.getGender(), parser.getAge(), ..., parser.getAddress())
这看起来不太好。
如果它们是var
,我可以使用其他方法来设置它们。但是,现在它们是val
s,因此以后无法更改。
除了使用主构造函数之外还有更好的方法吗?或者我应该在这种情况下使用var
?
答案 0 :(得分:6)
有时,格式化(可能还有一些别名)会让世界变得与众不同。添加一些命名参数,然后在介质上烘烤20分钟......
世界可以成为你的牡蛎:
case class Person(
name : String,
gender : String,
age : Int,
height : Double,
weight : Double,
birthday : Date,
address : String
) {
...
}
val p = parser
val person = Person(
name = p.getName(),
gender = p.getGender(),
age = p.getAge(),
...
address = p.getAddress()
)
答案 1 :(得分:1)
使用构建器模式。构建器可以使用var
来跟踪将用于初始化的数据,然后可以立即初始化类。它仍将具有所有这些参数,但您可以隐藏它们在构建器中的使用情况。
你甚至可以更进一步拥有类型安全的构建器,但这是一种先进的技术,增加的复杂性通常不值得。
答案 2 :(得分:0)
您可以让Person类的构造函数使用解析器并在类中执行“获取”逻辑