今天我们来介绍scala的高级特性,上次已经介绍过他的一个特性:高阶函数,这次是隐式转换

  1.隐式转换的例子 read的例子

    解析:发现这个file没有read的方法,然后就开始在开始在这个上下文里面找看有么有隐式的,

    匹配的,如果有,就可以转换,这个里面的匹配是类型的匹配,发现file匹配richfile的匹配

  2.匹配符号;

    -:逆变:作为偏函数的输入

    +:斜变:作为偏函数的输出
    则源码为:
    trait PartialFunction[-A,+B] extends (A => B),

    用的不是很多

  3.泛型

    【<:】UpperBound 上界(最大不超过什么)

    

class Pair[T <: Comparable[T]] {
def bigger(first:T,second:T) :T = {
if(first.compareTo(second) > 0) first else second
}
} object Pair{
def main(args: Array[String]): Unit = {
//选择一:
// val p = new Pair[String]
// println(p.bigger("hadoop","spark")) //选择二:
val p = new Pair[Integer]
println(p.bigger(5,4)) //选择三:
val p = new Pair[Int]
println(p.bigger(5,4)) }
}  

则这个Pair有这样的一个泛型的方法,bigger,比较两个数字,哪个大,
其中Pair[T <:Comparable[T]] 这个是表明这个泛型T的最大的类型不要超过Comparable的这个接口(注:Comparabel这个是类的比较的方法,)
每一个选择,在一个类总只能出现一次,如果当这个伴生的对象里面的是
选择一:正确,输出spark,应为String类型属于java.lang.String,实现于Comparable
选择二:正确,输出5,java.lang.Integer实现与Comparable
选择三:错误,应为scala.Int不继承与实现Comparable

【>:】LowerBound 下界
最低的界限,如果要满足,要比这个高才行
则我们可以看java的代码,是? List<? super korean>,只要传入的是Korean的父类即可
同理,我们scala用>:表示

【<%】:ViewBound
视图定界:
例如:我们假如有两个类,一个girl,一个boy,我们要对这两个对象进行比较,以前我们的做法是对boy里面的重写companyto的方法,然后在进行比较,但是这个方法有一个弊端,就是对于每一个类,我们都要重写这个比较,
1.首先我们要有一个Girl类:

class Girl(val name:String ,var faceValue :Int) {
}
2.隐式转换,girl的比较
object MyPredef {
implicit def girl2Order(g:Girl) = new Ordered[Girl]{
override def compare(that: Girl): Int = {
g.faceValue-that.faceValue
}
}
}

  

3.主函数调用
//<% 视图定界,默认此时的T就是相当于Ordered里面的T,一定要传入一个隐式转换函数

// 第一种方法
class Chooser[T <% Ordered[T]] {
def choose(first:T,second:T) :T ={
if(first > second) first else second
}
} object Chooser{
def main(args: Array[String]): Unit = {
import MyPredef._
val c = new Chooser[Girl]
val g1 = new Girl("anglebaby",90)
val g2 = new Girl("gsy",999)
val g = c.choose(g1,g2)
}
}

  【:】ContextBound

最新文章

  1. javascript闭包和作用域链
  2. MySQL Replication需要注意的问题
  3. Sony Z1 flashtool 刷机笔记
  4. 依赖注入(DI)和Ninject,Ninject
  5. 两个七牛app上传小脚本
  6. 普通B/S架构模式同步请求与AJAX异步请求区别(个人理解)
  7. 每天一个linux命令--退出&lt;符号
  8. ZOJ 3810 Pretty Poem 分类: ACM 2015-05-17 14:40 83人阅读 评论(0) 收藏
  9. 用PHP判断客户端是否是手机
  10. could not open XXX permission denied
  11. Android Wear 开发入门
  12. ASP.NET DataList绑定数据并实现分页
  13. uva11536 Smallest Sub-Array
  14. hdu4597 Play Game 区间DP
  15. Nginx 原理解析和配置摘要
  16. jar包添加到maven本地仓库
  17. python 警惕 IEEE 754标准
  18. VMware 安装 centos,自定义分区
  19. WorkerThread与MainThread之间通过Handler进行最简单的消息传递
  20. PHP判断字符串的包含

热门文章

  1. switch 和 if...else if 的区别
  2. 跨平台图表控件TeeChart使用教程:将图表数据导出为XML格式
  3. 悟空crm-0.5.4 (OpenLogic CentOS7.2)
  4. Python基础学习之字符串(1)
  5. CRM, C4C和Hybris的后台作业
  6. 通过WEB网管登录
  7. EF 状态版 增删改
  8. 第14章 启动文件详解—零死角玩转STM32-F429系列
  9. 微信小程序开发:禁止输入表情的控制,验证方法,光标控制
  10. Go HTTP模块处理流程简析