Description:
这篇博客中记录一下 scala 编程语言中的知识点
case class 在 scala 中的使用方法
case class 和 java 中所定义的 class 二者类似
- 在创建 case class 对象实例的时候,可以不用在实例前面加上 new 关键字
case class apple(name:String) class banana(color:String) val app = apple("i am a apple — —b") val ban = new banana("i am yellow — —||")
case class 创建的类对象实例调用 .toString 方法时显示出来的字体更漂亮
case class 实例会将 ‘case class 名称(里面是成员变量名称)’ 显示出来
class 的 .toString 方法会显示类似 java 语言直接打 Object 象信息的数据
如果你想通过打印的方式来快速获取类对象中的成员数据信息的话,推荐使用 case classcase class 默认实现了 equals 和 hashCode 两个方法,所以 case class 实例化的对象可直接调用这两个方法
case class 实现了(extends) Serializable ,可以对 case class 对象执行序列化操作
- 在声明 case class 的时候,传入的构造参数均是 public 的可以直接通过 实例名称.构造函数参数名称
来访问
case class Document(docId: String, body: String="", label: Set[String] = Set.empty, integerLabel: Int) 其中 body: String="" 这种赋值方式是默认赋值,如果调用者没有为该参数指定参数数值的话,就会使用默认的赋值。 如果调用者为该参数指定特定数值的话,该指定的特定数值便会替代该指定默认参数数值 但是如果最后一个参数为必须传入数值的参数类型的话,中间的参数数值是必须要给定的 1. val doc1 = Document("id1",2) println(doc1.toString) // 将会出错 2. val doc2 = Document("id2","doc2",Set("abc","eft") println(doc1.label) // output Set(abc,eft)
- case class 对象实例支持模式匹配,这是 scala 为何要提出 case class 这一类型的原因
abstract class methodX case class test1(n: Int) extends methodX case class test2(a: Int, b: Int) extends methodX object MatchPatternTester extends App{ def matchTester(term: methodX ){ term match{ case test1(n) => println("this is test1" +n) case test2(a,b) => println("this is test2 a , b"+a +" " +b) } } val x1 = test1(1027) val x1Result =matchTester(x1) val x2 = test2(10,72) val x2Result = matchTester(x2) }