快学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 第八课 (嵌套类)的更多相关文章
- 快学Scala 第十一课 (类继承)
类继承: class People { } class Emp extends People{ } 和Java一样,final的类不能被继承.final的字段和方法不能被override. 在Scal ...
- 快学Scala 第七课 (类构造函数)
类 主构造器: class Person (var name: String){ } 主构造参数可以不带val或者var,如果没有被其他方法使用,则不保存为字段. 如果被其他方法使用,则被升格为字段, ...
- 快学Scala 第六课 (类getter和setter)
类getter和setter 如果字段定义是private[this], 字段是私有的,但不生成getter和setter方法. class Counter { private[this] var v ...
- 快学Scala 第十课 (包和包对象)
Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main( ...
- 快学Scala 第十三课 (类型层级,对象相等性)
Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { over ...
- 快学Scala 第五课 (构造映射,获取映射值,更新映射值,迭代映射,与Java互操作)
构造映射: val score = Map[String, Int]() val score1 = HashMap[String, Int]() val value1 = Map[String, In ...
- 快学Scala 第四课 (多维数组,与Java集合的互操作)
Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...
- 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)
定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...
- 快学Scala 第二十一课 (初始化trait的抽象字段)
初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...
随机推荐
- Codeforces 416D Population Size
Population Size 题意: 一共n个数, 每个-1都可以变成一个正数, 现在要求最少数目的等差子序列,并且在这个子序列必须要连着截取一段,不能分开截取. 样例1: 8 6 4 2 1 4 ...
- iphone不支持(格式:2016-02-26 09:12)的格式时间需要转换成:(格式:2016/02/26 09:12)
function strToTime(str) {return Date.parse(str.replace(/-/g, "/"));} 苹果手机不支持创建这种时间格式 需要转化一 ...
- javascript 多个异步处理解决方法
JS异步处理真是一个让人头疼的东西,尤其是AJAX这个玩意.刚开始为了方便我会将jquery ajax 这个属性这样设置 async: false但是这样做问题很多,会让浏览器假死,好在ajax提供了 ...
- 分布式Id - redis方式
本篇分享内容是关于生成分布式Id的其中之一方案,除了redis方案之外还有如:数据库,雪花算法,mogodb(object_id也是数据库)等方案,对于redis来说是我们常用并接触比较多的,因此主要 ...
- 解决The mysql extension is deprecated and will be removed
今天打开网站突然发现报错:“PHP Deprecated: mysql_connect(): The mysql extension is deprecated and will be remove ...
- dubbo 的 spi 思想是什么?
面试题 dubbo 的 spi 思想是什么? 面试官心理分析 继续深入问呗,前面一些基础性的东西问完了,确定你应该都 ok,了解 dubbo 的一些基本东西,那么问个稍微难一点点的问题,就是 spi, ...
- flume learning---Flume 集群搭建
在flume搭建集群模式时,首先需要进入conf目录, 1.cp flume-env.sh.template flume-env.sh 2.cp flume-conf.properties.templ ...
- 【第十七篇】easyui-datagrid 导出Excel (在客户端能弹出下载框)
//导出Excel function exportExcel(obj) { var SaleOrderNo = $("#SaleOrderNo").val().trim(); va ...
- 服务器替换san存储
1.通知DBA停库: 串行登陆服务器 2.备份系统信息 mkdir -p /bakinfo df -h > /bakinfo/df.txt_`date +%Y%m%d%H%M%S` ps -ef ...
- Winform中使用FastReport的DesignReport时怎样给通过代码Table添加数据
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...