1.Scala中class、object、case class、case object区别

原文:Scala中class、object、case class、case object区别

  • class 类似Java中的class;
  • object Scala不能定义静态成员,用定义单例对象代之;
  • case class被称为样例类,是一种特殊的类,常被用于模式匹配。

1.1 class 和 object 关系

  • 1.单例对象不能带参数,类可以
  • 2.对象可以和类名一样时,object被称为伴生对象,class被称为伴生类;
  • 3.类和伴生对象可以相互访问其私有属性,但是它们必须在一个源文件当中;
  • 4.类只会被编译,不会被执行。要执行,必须在Object中。

1.2 case class 与 class 区别

  • 1.初始化的时候可以不用new,也可以加上,但是普通类必须加new;
  • 2.默认实现了equals、hashCode方法;
  • 3.默认是可以序列化的,实现了Serializable;
  • 4.自动从scala.Product中继承一些函数;
  • 5.case class 构造函数参数是public的,我们可以直接访问;
  • 6.case class默认情况下不能修改属性值;
  • 7.case class最重要的功能,支持模式匹配,这也是定义case class的重要原因。

1.3 case class 和 case object 区别

  • 1.类中有参和无参,当类有参数的时候,用case class ,当类没有参数的时候那么用case object。

1.4 当类被声明为case class的时,scala会做的事情

  • 1.构造器中的参数如果不被声明为var的话,它默认的话是val类型的,但一般不推荐将构造器中的参数声明为var
  • 2.自动创建伴生对象,同时在里面给我们实现子apply方法,使得我们在使用的时候可以不直接显示地new对象
  • 3.伴生对象中同样会帮我们实现unapply方法,从而可以将case class应用于模式匹配,关于unapply方法我们在后面的“提取器”那一节会重点讲解
  • 4.实现自己的toString、hashCode、copy、equals方法
  • 除此之此,case class与其它普通的scala类没有区别
case class Iteblog(name:String)

object TestScala {

  def main(args: Array[String]): Unit = {

    val iteblog = new Iteblog("iteblog_hadoop")

    val iteblog2 = Iteblog("iteblog_hadoop")

    println(iteblog == iteblog2)

    println(iteblog.hashCode)

    println(iteblog2.hashCode)
} }

最新文章

  1. iOS开发小技巧--判断控件是否显示在当前窗口
  2. gflags
  3. C语言中一个替换 strcpy的极好的方法
  4. C#中的泛型 【转】
  5. javascript 中的console.log和弹出窗口alert
  6. UVa 1585 Score --- 水题
  7. .net视图中日期格式化
  8. C# 保存PictureBox中的图片到数据库,并从数据库读取图片显示到PictrueBox,解决报错 “无效参数”
  9. linux hadoop 集群安装步骤
  10. 【Express】请求和响应对象
  11. 7款Linux下阅读PDF的阅读器。
  12. Python实现多线程HTTP下载器
  13. lambda高级进阶--返回函数
  14. 用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST
  15. mysql jdbc 官方编程示例
  16. Scrapy案例01-爬取传智播客主页上的老师信息
  17. linux(fedora) 第二课
  18. oracle数据链接
  19. Unity之如何从fbx提取Animation clip文件
  20. Win10系列:UWP界面布局基础12

热门文章

  1. Playwright VS Selenium VS Puppeteer VS Cypress
  2. Qt类库介绍
  3. 前端面试题归类-css的flex相关
  4. 在Docker下进行MyCAT管理双主双从MySQL集群
  5. idea多模块启动
  6. 切换用户后whoami打印用户的问题
  7. LeetCode542 01矩阵
  8. 搞定面试官:咱们从头到尾再说一次 Java 垃圾回收
  9. Docker 镜像基础(三)
  10. 【Linux】快速创建文件的命令方法