博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快学Scala 第八课 (嵌套类)
阅读量:6302 次
发布时间:2019-06-22

本文共 1674 字,大约阅读时间需要 5 分钟。

嵌套类:

class Human {  class Student{    val age = 10  }}object ClassDemo {  def main(args: Array[String]): Unit = {    val h = new Human    val s = new h.Student    println(s.age)  }}

有时会遇到这种情况:

class Human {  class Student {    def addS(s: Student) = {      val ab = new ArrayBuffer[Student]()      ab += s    }  }}object ClassDemo {  def main(args: Array[String]): Unit = {    val h = new Human    val h2 = new Human    val s = new h.Student    val s2 = new h2.Student    s.addS(s2)  }}

以上addS会报错,因为方法只能接收h.Student不能接收h2.Student。

解决方法有2个:

1. 类型投影

import scala.collection.mutable.ArrayBufferclass Human {  class Student {    def addS(s: Human#Student) = {      val ab = new ArrayBuffer[Human#Student]()      ab += s    }  }}object ClassDemo {  def main(args: Array[String]): Unit = {    val h = new Human    val h2 = new Human    val s = new h.Student    val s2 = new h2.Student    s.addS(s2)  }}

2. 伴生对象

object Human {  class Student {  }}class Human {    def addS(s: Human.Student) = {      val ab = new ArrayBuffer[Human.Student]()      ab += s    }}object ClassDemo {  def main(args: Array[String]): Unit = {        val h = new Human    val s = new Human.Student    val s2 = new Human.Student        h.addS(s)    h.addS(s2)          }}

嵌套类要访问外部类有2种方式:

1. 外部类.this

class Human {  val name = "Sky"  class Student {    println(Human.this.name)    def addS(s: Student) = {      val ab = new ArrayBuffer[Student]()      ab += s    }  }}

2. “自身类型”

class Human {  outter =>  class Student {    println(outter.name)    def addS(s: Student) = {      val ab = new ArrayBuffer[Student]()      ab += s    }  }    val name = "Sky"}

 

转载于:https://www.cnblogs.com/AK47Sonic/p/7287198.html

你可能感兴趣的文章
我学安卓——运行时hook之onClickListener
查看>>
Snort***检测系统安装配置
查看>>
Install Toad for Oracle 10.6 on Winows 7 X64
查看>>
Ubuntu忘记登录密码的解决办法
查看>>
批量分发ssh公钥证书
查看>>
Android系统启动流程(四)Launcher启动过程与系统启动流程
查看>>
jquery增,删,改一个html标签的class名字
查看>>
缓存技术
查看>>
怎么样将自己开发的Android应用程序编译到系统Image中
查看>>
Android度量单位说明(DIP,DP,PX,SP)
查看>>
Spring MVC和Struts2的比较的优点
查看>>
Redis配置文件redis.conf详解学习笔记八
查看>>
c++ qt 组播总结
查看>>
RobotFramework BuiltIn关键字笔记
查看>>
Spring整合JMS(四)——事务管理
查看>>
自己封装的golang 操作数据库方法
查看>>
Spring IOC启动流程学习(一)
查看>>
python tornado
查看>>
Android 自动换行的LinearLayout
查看>>
MacBook Pro电池校正
查看>>