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"
    }
    
  • 相关阅读:
    接口测试基础-ddt
    接口测试基础-json.loads-json数据格式转换成字典格式
    接口测试基础-拆包
    接口测试基础-导入第三方模块和删除第三方模块
    接口测试基础-正则表达式和参数化
    接口测试基础-Exece的操作-openpyxl模块
    matlab学习
    matlab学习笔记
    SSH框架配置及Maven使用
    运筹学框架图
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7287198.html
Copyright © 2011-2022 走看看