scala case class和class的区别
在Scala中存在case class,它其实就是一个普通的class。但是它又和普通的class略有区别,如下:
1、初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new;
scala> case class Iteblog(name : String) defined class Iteblog scala> val iteblog = Iteblog( "iteblog_hadoop" ) iteblog : Iteblog = Iteblog(iteblog _ hadoop) scala> val iteblog = new Iteblog( "iteblog_hadoop" ) iteblog : Iteblog = Iteblog(iteblog _ hadoop) |
2、toString的实现更漂亮;
scala> iteblog res 5 : Iteblog = Iteblog(iteblog _ hadoop) |
3、默认实现了equals 和hashCode;
scala> val iteblog 2 = Iteblog( "iteblog_hadoop" ) iteblog 2 : Iteblog = Iteblog(iteblog _ hadoop) scala> iteblog == iteblog 2 res 6 : Boolean = true scala> iteblog.hashCode res 7 : Int = 57880342 |
4、默认是可以序列化的,也就是实现了Serializable ;
scala> class A defined class A scala> import java.io. _ import java.io. _ scala> val bos = new ByteArrayOutputStream bos : java.io.ByteArrayOutputStream = scala> val oos = new ObjectOutputStream(bos) oos : java.io.ObjectOutputStream = java.io.ObjectOutputStream @ 4 c 257 aef scala> oos.writeObject(iteblog) scala> val a = new A a : A = $iwC$$iwC$A @ 71687 b 10 scala> oos.writeObject(a) java.io.NotSerializableException : $iwC$$iwC$A |
5、自动从scala.Product中继承一些函数;
6、case class构造函数的参数是public级别的,我们可以直接访问;
scala> iteblog.name res 11 : String = iteblog _ hadoop |
7、支持模式匹配;
其实感觉case class最重要的特性应该就是支持模式匹配。这也是我们定义case class的唯一理由,难怪Scala官方也说:It makes only sense to define case classes if pattern matching is used to decompose data structures. 。来看下面的例子:
object TermTest extends scala.App { def printTerm(term : Term) { term match { case Var(n) = > print(n) case Fun(x, b) = > print( "^" + x + "." ) printTerm(b) case App(f, v) = > print( "(" ) printTerm(f) print( " " ) printTerm(v) print( ")" ) } } def isIdentityFun(term : Term) : Boolean = term match { case Fun(x, Var(y)) if x == y = > true case _ = > false } val id = Fun( "x" , Var( "x" )) val t = Fun( "x" , Fun( "y" , App(Var( "x" ), Var( "y" )))) printTerm(t) println println(isIdentityFun(id)) println(isIdentityFun(t)) } |
分类:
Scala
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)