zoukankan      html  css  js  c++  java
  • 快学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"
    }
    
  • 相关阅读:
    Markdown基本语法学习
    gauge自动化测试框架(二)
    初识gauge自动化测试框架
    火狐浏览器历代版本下载地址
    selenium + python实现截图并且保存图片
    Python搭建简易HTTP服务(3.x版本和2.x版本的)
    ((0.1+0.7)*10) = ?
    从apache mod_php到php-fpm[转]
    Web API文档生成工具apidoc
    微信支付获取 prepay id 偶尔失败问题【转】
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7287198.html
Copyright © 2011-2022 走看看