博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala class和case class的区别
阅读量:6907 次
发布时间:2019-06-27

本文共 2001 字,大约阅读时间需要 6 分钟。

中存在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 
= 
new 
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的唯一理由,难怪
官方也说: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 
== 
=
true
    
case 
_ 
=
false
  
}
  
val 
id 
= 
Fun(
"x"
, Var(
"x"
))
  
val 
= 
Fun(
"x"
, Fun(
"y"
, App(Var(
"x"
), Var(
"y"
))))
  
printTerm(t)
  
println
  
println(isIdentityFun(id))
  
println(isIdentityFun(t))
}
 

转载于:https://www.cnblogs.com/runnerjack/p/8621442.html

你可能感兴趣的文章
线段树模板
查看>>
手动加载rvm
查看>>
ruby + nokogiri实现将天涯易读全帖转换成txt文件的功能
查看>>
Android应用程序中访问文件应用程序包中的资源(assets目录)
查看>>
MongoDB简介
查看>>
程序中处理一对多的数据
查看>>
MPU6050程序
查看>>
使用超棒超简单的自定义jQuery幻灯插件 Cycle2
查看>>
当nagios监测http时,会报错“ HTTP WARNING: HTTP/1.1 403Forbidden ~~~“ 解决方案
查看>>
页面表单预览数据传递注意事项
查看>>
linux c编程错误汇总
查看>>
【转】移动浏览器的viewport
查看>>
模块化Java:声明式模块化
查看>>
Oracle 分类统计sql
查看>>
vim——打开多个文件、同时显示多个文件、在文件之间切换_南山E家人_百度空间...
查看>>
mysql flush操作
查看>>
[译]FireClosure – JavaScript闭包检查器
查看>>
IT服务者的困惑与解决之道
查看>>
【新提醒】夏新大v安卓4.1尝鲜最新更新版本发布(包含进步版)1124更新 - 大V综合交流区 360论坛...
查看>>
gnuplot version 4.6 released!
查看>>