Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:case类private实现过程中的重要性_Scala_Case Class - Fatal编程技术网

Scala:case类private实现过程中的重要性

Scala:case类private实现过程中的重要性,scala,case-class,Scala,Case Class,我理解使用 case class private A() new A()#This will be a invalid call as A is private 但我不理解的是,从实现的角度来看,这在编码时提供了什么优势?因为调用一个类两次将给出该类的两个实例。如果不使用这种语法来阻止像Java那样的实例化,那么为什么我不希望有人使用new实例化我的类?将case类构造函数标记为私有是没有用的。正如您所注意到的,case类获得一个带有apply方法的合成伴生对象,其实现只是对实际构造函数的调

我理解使用

case class private A()

new A()#This will be a invalid call as A is private

但我不理解的是,从实现的角度来看,这在编码时提供了什么优势?因为调用一个类两次将给出该类的两个实例。如果不使用这种语法来阻止像Java那样的实例化,那么为什么我不希望有人使用new实例化我的类?

将case类构造函数标记为私有是没有用的。正如您所注意到的,case类获得一个带有apply方法的合成伴生对象,其实现只是对实际构造函数的调用


Scala case类被设计为仅类+case修饰符,这意味着在类上工作的所有内容也在case类上工作,这还包括在构造函数上指定访问修饰符的无意义功能。

case class private A无效。你是说A级私人案件?还是A级私人案件?我同意这不是很有用。Scala case类确实提供了比伴随对象中的apply方法更多的东西。e、 g.不情愿地。如果有一个有用的场景,您可能希望阻止直接实例化,但仍然需要模式匹配。我有点不愿意说这永远不需要,但我肯定想不出一个例子。