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"
    }
    
  • 相关阅读:
    【Hibernate框架】对象的三种持久化状态
    【Mybatis架构】Mapper映射文件中的#{}与${}
    【Mybatis架构】 延迟加载
    IDEA快捷键+使用小技巧
    Aop_AspectJ实现
    Aop_实践篇之过滤器
    Aop_思想篇
    超简单的Springboot中的日志管理配置
    SpringMVC+MYBatis企业应用实战笔记
    Spring学习
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7287198.html
Copyright © 2011-2022 走看看