case class有一个好的特性就是它会在它的伴生对象中自动生成unapply方法,用于模式匹配. 如果没有unapply方法, 类将无法进行模式匹配, 关于unapply方法的写法可见如下代码示例: sealed trait Pet object Pet { final class Dog(val name: String) extends Pet {} final class Cat(val name: String) extends Pet ...
用final修饰的方法:不能被重写 注意:(1)在Scala中变量不需要用final修饰,因为val与var已经限制了变量是否可变 (2)final不能修饰特质,但是可以修饰抽象类 1 2 3 4 5 6 7 traitAnimal { defeat(name:String) finaldefsleep(name:String):Unit={ println(s"$name ->睡得天花乱坠") } } 如图代码,Pig继承...
case class类的参数都是可以直接访问的val(不能被修改),但是实际上编译成的class字节码会对book.name转成book.name()方法调用。如下图所示,name声明的时候是加了final关键字,并且生成了对应的name()方法。printBookName()方法中使用到的book.name实际上是调用的name()方法。模式匹配 模式匹配是检查某个值(v...
case class类的参数都是可以直接访问的val(不能被修改),但是实际上编译成的class字节码会对book.name转成book.name()方法调用。如下图所示,name声明的时候是加了final关键字,并且生成了对应的name()方法。 printBookName()方法中使用到的book.name实际上是调用的name()方法。 模式匹配 模式匹配是检查某个值(val...
Scala在匹配多个case类时提取中的参数以供理解 我有一个带有多个case类的密封trait实现,每个case类都有自己的参数,其中一些具有相同类型的param(在本例中,我想提取:Trigger),而其中一些没有。 sealed trait Event object MyTrait { final case class EventA(context: Context) extends Event...
Scala语言来源于Java,它以Java虚拟机(JVM)为运行环境,Scala源码 (.scala)会编译成.class文件。这意味着Scala程序可以与Java程序互操作,并且可以利用JVM的优化和性能。 在语法上,Scala和Java有一些区别。 例如,在Scala中,一切皆为对象,而在Java中,基本类型、null、静态方法等不是对象。在Scala中,成员变量/属性必须...
object demo2{defmain(args:Array[String]):Unit={//创建元组val tuple=(1,2,"hello")//访问元组//1. 使用 _顺序号println(tuple._2)// "hello"//2. 使用println(tuple.productElement(2))//下标是从 0 开始计算//遍历元组for(i<-tuple.productIterator){println(i)}}finalcaseclassTuple3[+T1,+...
,"This string contains a \" character." package scala final case class Symbol private (name: String) { override def toString: String = "'" + name } 多行的String使用"""..."""来表示。 null的类型为scala.Null,表示指向"null" object的reference,可以跟任意类型的reference比较。
再反编译Person$.classCompiled from "Person.scala" public final class com.mobin.scala.Person$ extends scala.runtime.AbstractFunction2<java.lang.String, java.lang.Object, com.mobin.scala.Person> implements scala.Serializable { public static final com.mobin.scala.Person$ MODULE$; public static {...
final case class Some[+A](x: A) extends Option[A]= false def get = x } @SerialVersionUID(5066590221178148012L) // value computed by serialver for 2.11.2, annotation added in 2.11.4 case object extends Option[Nothing]= true def get = throw new NoSuchElementException("None.get") ...