搜索
查看: 1243|回复: 0

scala 基础 3

[复制链接]

42

主题

0

回帖

204

积分

中级会员

积分
204
发表于 2018-3-16 13:28:03 | 显示全部楼层 |阅读模式

apply 和 unapply 方法
apply方法一般被称为注入方法一般用于伴生对象初始化的操作,apply方法的参数列表不需要和构造函数的参数列表统一
unapply方法常被称为提取方法可以用unapply方法提取相同操作的对象,unapply方法会返回一个Option,其内部生成一个Some对象,这个Some是做相似对象的封装,unapply常被用于模糊匹配
apply方法和unapply方法都被隐式的调用

private关键字
在class前面使用private[包名]代表是包的访问权限,只能指定的包名下才能访问
在包名和构造器的参数列表中间加private是指伴生对象的访问权限,只有伴生对象才能访问
变量前加private,此时该字段成为私有字段,伴生对像能访问
变量前加private[this],此时该字段成为私有字段,伴生对像不能访问
方法前加private,此时该字段成为私有方法,伴生对像能访问
方法前加private[this],此时该字段成为私有方法,伴生对像不能访问

package com.hainiuprivate[hainiu class PrivateDemo private (val sex:String,var other:String){private val name:String = "hainiu"private[this var age:Int = 24private def action():Unit = {println(s"name:$name,age:$age")}private[this def action1():Unit = {println(s"name:$name,age:$age")}}object PrivateDemo{def main(args: Array[String): Unit = {val demo = new PrivateDemo("","")println(demo.name)println(demo.action)}}object Test{def main(args: Array[String): Unit = {//    val demo = new PrivateDemo("","")}}

特质与抽象类
抽象类:
抽象类与Java相似,只是Java中没有属性的抽象

特质:
可以把特质理解成Java中升级版的接口
在Java中接口不能声明没有值的属性和有实现的方法而Scala可以

重写:
重写与Java相似,只是Java中没有重写属性的概念

特质和抽象类的使用区别:
只能继承一个抽象类,但可以实现多个特质。这点和Java一样

语法注意:当不继承类直接实现一个特质,可以不用with直接用extends,实现多个特质的时候可以用多个with,但是必须先extends第一个特质

trait Type1{val aaa:String}trait Type2{val bbb:String}class benz extends Type{override val energy: String = _override val power: String = _}class benz1 extends Type with Type1 with Type2{override val energy: String = _override val power: String = _override val aaa: String = _override val bbb: String = _}

模式匹配
类似Java中的switch case,但比Java中的强大的多,不仅可以匹配字段串、类、元组、集合等
和Java有一点不同就是匹配不到会摄氏,这个需要注意一下
语法
变量 match{
case "值" => 函数体1
case "值2" => 函数体2
}

字体串匹配

数组、元组、集合匹配

元组匹配时case后面的值的个数应与被匹配的元组中数据的个数相同,否报错。
当有多个条件能匹配到时以最先匹配到的条件为准

偏函数匹配
PartialFunction[A,B]其中A是方法参数类型,B是方法返回值类型,PartialFunction(偏函数)常用作模式匹配,可以用自定义的方法代替

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海牛部落牛,http://hainiubl.com/topics/209
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
 
大数据行业交流
大数据行业交流
大数据求职招聘
大数据求职招聘
站长电话:
15010106923
微信联系:
hb-0310
站长邮箱:
ab12-120@163.com
大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-4-25 11:35 , Processed in 0.116442 second(s), 24 queries .

快速回复 返回顶部 返回列表