Scala为函数式编程提供的特性之一为case class. case class拥有所有普通class的功能,同时还有更多的扩展功能. 当编译器检查到class前边有case关键字时,它会为你自动生成一些功能代码, 主要包含如下几种特性: case class的构造器参数默认为公共的val变量, 因此每个参数变量的访问方法也会被自动生成. apply 方法将会在cas...
caseclassCompany(name:String)classPerson(val name:String){}objectPerson{defapply(name:String):Company=newCompany(name)} 利用这个特点我们可以将一个类写成Builder abstractclassDatabaseDriver{// some database stuff}object DatabaseDriver{defapply(config:Configuration)=config.dbType match{case"MYSQL"=>new...
case class定义 在实例化case class类时,不需要使用关键字New,case class类编译成class文件之后会自动生成apply方法,这个方法负责对象的创建。通过JD-GUI工具可以查看编译后的.class文件(有兴趣的可以自己看下)。Scala自动为Book生成了apply静态方法,里面调用了Book$类的apply方法用来生成Book对象。Book$类的截图 c...
在实例化case class类时,不需要使用关键字New,case class类编译成class文件之后会自动生成apply方法,这个方法负责对象的创建。 通过JD-GUI工具可以查看编译后的.class文件 Scala自动为Book生成了apply静态方法,里面调用了Book$类的apply方法用来生成Book对象。 Book$类的截图 case class类的参数都是可以直接访问的val(...
多说一句,case class除了可以用匹配模式外,还多了一个特点就是会默认配上一个companion object,里面有默认的apply方法,所以这张图的例子中我就可以看起来不用new地实例化对象。 这么看,case class是class功能上的一个加强,并且没有什么坏处,这么一想,以后直接把所有class都声明成case class好了。
1.1 apply方法 apply方法可以让我们快速地使用类名来创建对象。参考以下代码: case class CasePerson(name:String, age:Int) object CaseClassDemo { def main(args: Array[String]): Unit = { val lisi = CasePerson("李四", 21) println(lisi.toString) ...
case class 创建case class 和它的伴生 object 实现了 apply 方法让你不需要通过 new 来创建类实例 默认为主构造函数参数列表的所有参数前加 val 添加天然的 hashCode、equals 和 toString 方法。 生成一个 copy 方法以支持从实例 a 生成另一个实例 b ...
case类在模式匹配和actor中经常使用到,当一个类被定义成为case类后,Scala会自动帮你创建一个伴生对象并帮你实现了一系列方法且带来了不少好处,如下: 1.实现了apply方法,意味着你不需要使用new关键字就能创建该类对象 1 2 3 4 5 scala>caseclassPeople(name:String,age:Int) ...
Person apply(java.lang.String, int); public scala.Option<scala.Tuple2<java.lang.String, java.lang.Object>> unapply(com.mobin.scala.Person); public java.lang.Object apply(java.lang.Object, java.lang.Object); }通过反编译以上两个class文件可以知道,当你将一个类定义为case类后,编译器就自动帮...
当你定义一个case class,你将不再需要使用new关键字来创建新的实例,代码示例如下:不需要new关键字创建对象的实例是因为apply方法已经在case class的伴生对象中被生成,apply方法会用与生成类的实例对象。No mutator methods case class的构造参数默认是val不可变的,因此编译器将不会为case class生成字段...