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

其实我觉得这内容不常用的样子 -_-!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值