标签:student ble sky logs array bsp demo 解决 类型
嵌套类:
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" }
标签:student ble sky logs array bsp demo 解决 类型
原文地址:http://www.cnblogs.com/AK47Sonic/p/7287198.html