Scala基础知识笔记7-类型参数(泛型)-隐式转换-actor

 

 1 泛型: 

object FanXing {

  def main(args: Array[String]): Unit = {

    /**
      * 类型参数就是Java中的泛型
      * 1 泛型类
      * 2 泛型函数
      * 3 上边界
      * 4 下边界
      * 5 view bounds
      * 6 context bounds
      * 7 manifest bounds
      * 8 协变和逆变
      * 9
      */

    // 泛型函数
    def getCard[T](content:T) = {
      if(content.isInstanceOf[Int]) "card num is:" + content
      else if(content.isInstanceOf[String]) "the card content is " + content
      else "card: " +content
    }

    var res = getCard("123")
    println(res)

  }
}

// 1 泛型类
class Student[T](var localid:T) {

}

  

2 隐式转换:

 

发生的时机;

1、调用某个函数,但是给函数传入的参数的类型,与函数定义的接收参数类型不匹配
2、使用某个类型的对象,调用某个方法,而这个方法并不存在于该类型时
3、使用某个类型的对象,调用某个方法,虽然该类型有这个方法,但是给方法传入的参数类型,与方法定义的接收参数的类型不匹配

class Man(var name:String)
class SuperMan(var name:String) {
  def fashe = println("emit soon")
}

object FanXing {

  def main(args: Array[String]): Unit = {
  // 定义隐式函数
    /**
 Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicit conversion function。定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用。
Scala会根据隐式转换函数的签名,在程序中使用到隐式转换函数接收的参数类型定义的对象时,会自动将其传入隐式转换函数,转换为另外一种类型的对象并返回。这就是“隐式转换”。
常建议将隐式转换函数的名称命名为“one2one”的形式。
      */
    // 1 如下定义一个隐式函数,按照上面介绍,此方法因为前缀是implicit 会被scala自动引用
    implicit  def man2Super(man:Man) : SuperMan  = new SuperMan(man.name)
    // 2 然后在程序汇总使用到上面函数的参数Man时, 会自动调用上面的隐式函数,将Man作为SuperMan对象返回
    var leo = new Man("leo")
    // 因此leo 对象可以调用 SuperMan(非自己类)的方法的函数
    leo.fashe // emit soon


}
}

 

 

3 Actor

 

posted on 2019-07-03 22:18  ligongda2006  阅读(137)  评论(0编辑  收藏  举报