Scala嵌套类

// Network.scala
import scala.collection.mutable.ArrayBuffer

class Network {
  class Member(val name: String) {
    val contacts = new ArrayBuffer[Member]
  }

  private val members = new ArrayBuffer[Member]

  def join(name: String) = {
    val m = new Member(name)
    members += m
    m
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val chatter1 = new Network
    val chatter2 = new Network

    //Fred 和 Wilma加入局域网1
    val fred = chatter1.join("Fred")
    val wilma = chatter1.join("Wilma")

    //Barney加入局域网2
    val barney = chatter2.join("Barney")

    //Fred将同属于局域网1中的Wilma添加为联系人
    fred.contacts += wilma

    //fred.contacts += barney //这样做是不行的,
    //Fred和Barney不属于同一个局域网,
    //即,Fred和Barney不是同一个class Member实例化出来的对象
  }
}

在Network.scala中,chatter1.Member和chatter2.Member是不同的两个类。

// Network2.scala
import scala.collection.mutable.ArrayBuffer

// 伴生对象
class Network2 {
  private val members = new ArrayBuffer[Network2.Member]
  def join(name: String) = {
    val m = new Network2.Member(name)
    members += m
    m
  }
  def description = "该局域网中的联系人:" +
    (for (m <- members) yield m.description).mkString(", ")
}

object Network2 {
  class Member(val name: String) {
    val contacts = new ArrayBuffer[Member]
    def description = name + "的联系人:" +
      (for (c <- contacts) yield c.name).mkString(" ")
  }
}

object Main2 {
  def main(args: Array[String]): Unit = {
    //创建局域网3
    val chatter3 = new Network2
    //创建局域网四
    val chatter4 = new Network2

    //Fred 和 Wilma加入局域网3
    val fred2 = chatter3.join("Fred")
    val wilma2 = chatter3.join("Wilma")

    //Barney加入局域网4
    val barney2 = chatter4.join("Barney")

    //Fred将同属于局域网3中的Wilma添加为联系人
    fred2.contacts += wilma2

    //Fred将不同属于局域网3中,属于局域网4中的的barney2添加为联系人
    fred2.contacts += barney2

    println(chatter3.description)
    println(chatter4.description)

    println(fred2.description)
    println(wilma2.description)
    println(barney2.description)
  }
}

// Network3.scala
import scala.collection.mutable.ArrayBuffer

//类型投影
class Network3 {
  class Member(val name: String) {
    val contacts = new ArrayBuffer[Network3#Member]
  }

  private val members = new ArrayBuffer[Member]

  def join(name: String) = {
    val m = new Member(name)
    members += m
    m
  }
}

object Main3 {
  def main(args: Array[String]): Unit = {
    //创建局域网5
    val chatter5 = new Network3
    //创建局域网6
    val chatter6 = new Network3

    //Fred 和 Wilma加入局域网5
    val fred3 = chatter5.join("Fred")
    val wilma3 = chatter5.join("Wilma")

    //Barney加入局域网6
    val barney3 = chatter6.join("Barney")

    //Fred3将同属于局域网5中的Wilma3添加为联系人
    fred3.contacts += wilma3

    //Fred将不同属于局域网5中,属于局域网6中的的barney3添加为联系人
    fred3.contacts += barney3
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值