scala编程相关知识1

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 class

  • case 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)

}