Scala入門之高級類型:類型投影

類型投影

類型投影的目的是將外部類Outter中定義的方法def print(i:Inner)=i,它可以接受做任意外部類對象中的Inner類。格式是 Outter#Inner
直接看代碼更容易理解
package com.dt.scala.moguyun

/**
  * Created by hlf on 2016/8/9 for learn TypeProjection.
  * 類型投影主要用在有外部類和內部類,並且外部類有方法是需要傳入內部類作
  * 參數的時候用的,而這個傳入的參數要求除了可以是自己這個對象的內部類,
  * 也可以是其他實例對象的內部類,只要都是實例化這個類就行了。
  */
object TypeProjection extends App{
  val outter1 = new OutterClass
  outter1.getName("電腦")
  val inner1 = new outter1.InnerClass
  inner1.getName("主機")
  println(outter1)

  val outter2 = new OutterClass
  outter2.getName("洗衣機")
  val inner2 = new outter2.InnerClass
  inner2.getName("滾筒")
  println(outter2)
  println("==============無類型投影=================")
  //如果我想把洗衣機的滾筒這個內部類放到電腦這裏的getInner方法裏
  outter1.getInner(inner1)//放自己的沒問題,也沒意義的樣子
  //outter1.getInner(inner2)會報錯,提示不匹配
  println("==============類型投影=================")
  outter1.getInner2(inner2)//新添加一個類型投影就可以了

}

/**
  * 外部類,內部類其實是外部類的一個成員,不像JAVA一樣
  */
class OutterClass{
  outter =>
  var name: String = _
  def getName(getname: String): Unit ={
    this.name = getname
  }
  def getInner(innerClass: InnerClass) = {
    println("innerClass'name is " + innerClass.name)//調用內部類成員
    println("I'm a " + name + "!!!I'm aloof")
  }

  def getInner2(innerClass: OutterClass#InnerClass) = {
    println("innerClass'name is" + innerClass.name)//調用內部類成員
    println("I'm a " + name + " !!!I'm aloof")
  }

  /**
    * 內部類
    */
  class InnerClass{
    inner =>
    var name: String = _
    def getName(getname: String): Unit ={
      this.name = getname
    }
    def say: Unit ={
      println("outterClass is  " + outter.name)//調用外部類成員
      print("I'm a Innerclass!!!I'm proud")
    }
  }
  //這裏想把內部類名字也寫上的,但是水平有限調不出來 :(
  override def toString: String = "outterClass is: " + name
}

運行結果
outterClass is: 電腦
outterClass is: 洗衣機
==============無類型投影=================
innerClass'name is 主機
I'm a 電腦!!!I'm aloof
==============類型投影=================
innerClass'name is滾筒
I'm a 電腦 !!!I'm aloof

其實我覺得這內容不常用的樣子 -_-!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章