码迷,mamicode.com
首页 > 其他好文 > 详细

快学Scala 第八课 (嵌套类)

时间:2017-08-04 22:42:25      阅读:183      评论:0      收藏:0      [点我收藏+]

标签: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"
}

 

快学Scala 第八课 (嵌套类)

标签:student   ble   sky   logs   array   bsp   demo   解决   类型   

原文地址:http://www.cnblogs.com/AK47Sonic/p/7287198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!