王家林親授《DT大數據夢工廠》大數據實戰視頻 Scala 深刻淺出實戰經典(1-64講)完整視頻、PPT、代碼下載:
百度雲盤:http://pan.baidu.com/s/1c0noOt6
騰訊微雲:http://url.cn/TnGbdC
360雲盤:http://yunpan.cn/cQ4c2UALDjSKy 訪問密碼 45e2
土豆:http://www.tudou.com/programs/view/85BX4YBSdSI/
優酷:http://v.youku.com/v_show/id_XMTI4MjU5NjIyMA==.html?from=s1.8-1-1.2
愛奇藝:http://www.iqiyi.com/w_19rrxj6hmh.html#vfrm=2-3-0-1
騰訊視頻: http://v.qq.com/boke/page/y/0/j/y0159g6di6j.html
技術愛好者尤爲是大數據愛好者 能夠加DT大數據夢工廠的qq羣html
DT大數據夢工廠① :462923555
DT大數據夢工廠②:437123764
DT大數據夢工廠③ :418110145java
微信公衆帳號: DT_Spark
王家林老師微信號: 18610086859
王家林老師QQ: 1740415547
王家林老師郵箱: 18610086859@126.com微信
本視頻由王家林老師, 親自講解, 徹底經過代碼實戰把您帶人大數據的時代.函數
package com.parllay.scala.oop /** * Created by richard on 15-8-4. * 第50講:Scala中Variance變化點 */ class Animal class Bird extends Animal class Chicken extends Animal class Pair22[+T](var p: T){ //def haveLegs(p1: T) = println("") } object Variance_Point { /** 根據Liskov替換原則,若是A是B的子類,那麼能適用於B的全部操做,都適用於A。 讓咱們看看這邊Function1的定義,是否知足這樣的條件。 假設Bird是Animal的子類,那麼看看下面兩個函數之間是什麼關係: def f1(x: Bird): Animal // instance of Function1[Bird, Animal] def f2(x: Animal): Bird // instance of Function1[Animal, Bird] 在這裏f2的類型是f1的類型的子類。爲何? 咱們先看一下參數類型,根據Liskov替換原則,f1可以接受的參數,f2也能接受。 在這裏f1接受的Bird類型,f2顯然能夠接受,由於Bird對象能夠被當作其父類Animal的對象來使用。 再看返回類型,f1的返回值能夠被當作Animal的實例使用,f2的返回值能夠被當作Bird的實例使用, 固然也能夠被當作Animal的實例使用。 因此咱們說,函數的參數類型是逆變的,而函數的返回類型是協變的。 那麼咱們在定義Scala類的時候,是否是能夠隨便指定泛型類型爲協變或者逆變呢?答案是否認的。 經過上面的例子能夠看出,若是將Function1的參數類型定義爲協變,或者返回類型定義爲逆變, 都會違反Liskov替換原則,所以,Scala規定,協變類型只能做爲方法的返回類型, 而逆變類型只能做爲方法的參數類型。類比函數的行爲,結合Liskov替換原則, 就能發現這樣的規定是很是合理的。 * @param args */ def main(args: Array[String]) { } }