首页 > 代码库 > 快学Scala 第八课 (嵌套类)
快学Scala 第八课 (嵌套类)
嵌套类:
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.ArrayBuffer class 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" }
快学Scala 第八课 (嵌套类)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。