Scala入门之高级类型:类型投影
2016-08-09 16:30
417 查看
类型投影
类型投影的目的是将外部类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
其实我觉得这内容不常用的样子 -_-!
相关文章推荐
- Scala入门到精通——第二十二节 高级类型 (一)
- Scala入门到精通——第二十四节 高级类型 (三)
- Scala入门之高级类型:结构类型
- Scala入门到精通——第二十三节 高级类型 (二)
- Scala入门到精通——第二十三节 高级类型 (二)
- Scala入门到精通——第二十四节 高级类型 (三)
- Scala入门之高级类型:this.type
- Scala入门到精通——第二十四节 高级类型 (三)
- Scala入门到精通——第二十四节 高级类型 (三)
- Scala入门到精通——第二十二节 高级类型 (一)
- Scala入门到精通——第二十二节 高级类型 (一)
- 【Go入门教程3】基本类型 和 高级类型
- Scala入门之类型参数
- TypeScript入门-高级类型
- Scala高级特性中的类型参数总结(1)
- 快学Scala学习笔记及习题解答(17-18类型参数与高级类型)
- scala类型系统:4) 内部类,路径依赖类型&类型投影
- Scala入门到精通—— 第二节Scala基本类型及操作、程序控制结构
- scala简要:高级函数和高级类型
- Scala类型系统——高级类类型(higher-kinded types)