zoukankan      html  css  js  c++  java
  • 19-6 逆变

    ①在函数作为参数传递时,入参逆变,返回值协变,Function1[-S, +T]。并不是说函数f的入参类型为A,可以传入其父类B,相反只能传入A及其子类。

    ②下面的例子中方法printBookList参数为一个函数info,函数info的入参为子类Book。而运行时传入的函数getTile入参为父类Publication,可以传入Publication及其子类,在方法printBookList调用info函数时,传入的正是其子类Book。而函数getTile作为参数传递时,其入参为要求的函数的父类,在类型参数上表现出逆变的特点。

    object Customer{
      def getTitle(p: Publication): String = p.title
    
      def main(args: Array[String]): Unit = {
        Library.printBookList(getTitle)
      }
    
    }
    
    class Publication(val title: String)
    
    class Book(title: String) extends Publication(title)
    
    object Library{
      val books: Set[Book] = Set(new Book("Programming in Scala"), new Book("Walden"))
    
      def printBookList(info: Book => AnyRef) = {
        for (book <- books)
          println(info(book))
      }
      
    }
    

      

  • 相关阅读:
    并查集
    CCF201604-02
    作业八
    作业七
    数据结构--链队列基本操作
    数据结构--栈的基本操作
    eclipse配置maven
    软件架构
    scala lambda 表达式 & spark RDD函数操作
    spark(3)
  • 原文地址:https://www.cnblogs.com/noyouth/p/14249059.html
Copyright © 2011-2022 走看看