Scala之Case Class

本文原文出处: http://blog.csdn.net/bluishglc/article/details/50914001 严禁任何形式的转载,否则将委托CSDN官方维护权益!

Case Class的特别之处在于:

  1. 编译器会为Case Class自动生成以下方法:

    • equals & hashCode
    • toString
    • copy
  2. 编译器会为Case Class自动生成伴生对象
  3. 编译器会为伴生对象自动生成以下方法
    • apply
    • unapply

      这意味着你可以不必使用new关键字来实例化一个case class.

  4. case class的类参数在不指定val/var修饰时,会自动编译为val,即对外只读,如果需要case class的字段外部可写,可以显式地指定var关键字!

归纳起来,编译器会为Case Class自动生成的方法如下(注意Location是Class还是Object):

以上就是Case Class的全部特征,简单地总结起来就是:让编译器帮忙自动生成常用方法!反过来,如果你手动实现了对应的方法和伴生对象,那么就等同于生成了Case Class. 而实际使用过程中,手动实现这些方法是很繁琐和无趣的,使用Case Class就是最好的选择。当你希望设计一个类只是用来作为数据载体时,

Case Class是一个很好的选择,实际上,这正是DTO(或者也有叫作VO)做的事情,所以说Case Class的一个典型应用场景就是DTO。

另外,通常不会让一个普通类继承Case Class,这会导致一些问题,比如:equals/hashCode/toString方法都会失效。

时间: 2024-08-10 06:46:34

Scala之Case Class的相关文章

scala 使用case 关键字定义类不需要创建对象直接调用

1.必须是使用case 定义object类 package config import org.apache.spark.sql.SparkSession import org.apache.spark.{SparkConf, SparkContext} case object conf { val confs: SparkConf = new SparkConf().setMaster("local").setAppName("job") val sc = new

Scala 中 case class 与 class 的区别(代码示例)

class 类似Java中的class case class 被称为样例类,是一种也输的类,常被用于模式匹配 具体区别: 1,初始化的时候可以不用new ,也可以加上,但是普通类必须加上new 2,默认实现了equals.hashCode方法 3,默认是可以序列化的,实现了Serializable 4,case class 构造函数参数是public的,我们可以直接按访问 5,case class默认情况下不能修改属性值 7,case class 最重要的功能,支持模式匹配,这也是定义case

scala case class

在我们详细介绍Scala的Case class和模式匹配之前,我们可以通过一个简单的例子来说明一些基本概念.我们设计一个函数库,这个函数库可以用来计算算术表达式,为简单起见,我们设计的算术表达式只侧重于变量,数字,单操作符,和双操作符.我们可以采用如下的Scala类定义: abstract class Expr case class Var(name:String) extends Expr case class Number(num:Double) extends Expr case clas

探索Scala(4)-- Case Classes

本文简单探讨一下Scala语言Case Class的实现机制 Case Class Case Class是Scala语言模式匹配功能的基础.如果定义类的时候加上case关键字,那么它就变成了Case Class,比如下面这个简单的类CC: case class CC(x: Int, y: Int) 那么加上case关键字对于一个类来说,到底意味着什么呢?下文将进行详细的解释. 单例对象 编译CC,会产生两个class:CC.class和CC$.class.这说明,Scala会给case类自动添加

case class inheritance

Scala 禁止case class inheritance case class Person(name: String, age: Int) case class FootballPlayer(name: String, age: Int, number: Int) extends Person(name, age) 在编译时会报出以下错误: Error:(5, 12) case class FootballPlayer has case ancestor Person, but case-

scala简单介绍

前言 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scala 运行在Java虚拟机上,并兼容现有的Java程序. Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. Scala跟JAVA很像,假如你之前已经掌握了JAVA,那么学习Scala将会简单很多 简介 Scala 是 Scalable Language 的简写,是一门多范式的编程语言 联邦理工学院洛桑(EPFL)

Scala语言初识

scala是一种集面向对象特性和函数式特性于一身并可运行在JVM上的强类型静态语言.因为可以运行在JVM上,并在设计时借鉴于大量的java语言特性,故可以和java互动并可以调用java相关类库,这让现在大量掌握java的编程者的智力投资得到极大的利用.并且还借鉴了Elang函数语言及Ruby等脚本语言,从而有高效,轻便等特性,从而原来掌握Ruby,Erlang等语言者,来学习scala时感到亲切从而更加快捷掌握. scala由洛桑联邦理工学院的Martin Odersky设计,第一个版本发布于

Scala语言学习

Scala的程序被编译成Java字节码,所以可以运行在JVM上,并且可以调用Java的类库,兼容Java程序. Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成OOP和函数式编程(FP)的各种特性: 面向对象特性:Scala是一种纯面向对象的语言,每个值都是对象.Scala类扩展有两种途径:一种途径是子类继承(单继承),另一种途径是灵活的混入机制.这两种途径能避免多重继承的种种问题. 函数式编程:即函数也能当成值来使用.可以定义匿名函数.高阶函数.多层嵌套函数

Scala 基础入门【翻译】

原文地址 本文只是带你进入 Scala 的世界,包括安装.不可变变量 val.可变变量 var.定义类.集合(包括列表(list).集(set).映射(map))以及集合遍历和集合库(能达到并行/并发效果). 题外话,如果 Java 争气的话,还就真不会出现像 Scala 这些语言.对于函数编程风格的支持,尤其是对于 Lambda 表达式的支持,能够有助于减少必须要编写的逻辑无关样板代码,也许让它可以更简单的关注要面对的任务本身.而 Java 对 Lamdba 表达式的支持到 JavaSE8 才