只是想知道这是否可行.我真正想要做的是检查并可能修改其中一个参数,然后将其存储为val.
或者,我可以使用重载并使默认构造函数为私有.在这种情况下,我还想私有对象对象中的默认工厂构造函数,我该怎么做?
非常感谢.
亚当
编辑:我发现,使默认构造函数私有也使默认工厂构造函数私有,所以我有一个解决方案,我仍然有兴趣知道默认构造函数是否可以覆盖
Ken*_*oom 23
您没有选择更改默认构造函数存储其参数的方式(例如,通过在将参数存储为vals 之前修改参数),但如果参数错误,您可以选择抛出异常(这将在参数存储)
case class Foo(x:Int){
if (x<0) throw SomeException;
}
Run Code Online (Sandbox Code Playgroud)
您还可以选择实现调用第一个构造函数的其他构造函数
case class Foo(x:Int){
def this(x:Int,y:Int) = this(x+y)
}
Run Code Online (Sandbox Code Playgroud)
但那些没有工厂方法.
您可以通过将工厂方法添加到配套对象来轻松创建工厂方法
object Foo{
def apply(x:Int,y:Int) = new Foo(x,y)
}
Run Code Online (Sandbox Code Playgroud)
还有什么比这更复杂,你不得不放弃的情况下类并实现它在自己的部分:apply,unapply,equals,和hashCode.Scala中的编程讲述了如何完成所有这些,为equals和提供良好的公式hashCode.
Ran*_*ulz 11
辅助案例类构造函数的存在不会导致编译器在类的伴随中生成其他工厂方法,因此您将无法获得CaseClaseName(«secondary constructor parameter list»>)创建它们的便利.你必须使用new关键字.
最好将您在备用工厂方法中描述的逻辑类型放在伴随对象中,并坚持使用主构造函数.