Scala扩大内部类作用域的方式有哪些

本篇内容介绍了“Scala扩大内部类作用域的方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

乳山网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。成都创新互联成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

内部类初始用户,内部类的作用域属于:外部类对象,不同外部类对象中的内部类对象类型不同会报错type mismatch。

实例代码:

注意:

    定义了一个外部类Person 和一个内部类Student

package com.hadoop.ljs.spark.studyimport scala.collection.mutable.ArrayBuffer/**  * @author: Created By lujisen  * @company ChinaUnicom Software JiNan  * @date: 2020-02-08 22:49  * @version: v1.0  * @description: com.hadoop.ljs.spark.study  */class Person {  class  Student(val name:String){}  val students=new ArrayBuffer[Student]  def getStudent(name:String):Student={    return  new Student(name)  }}

主函数:

    这里person2对象里面的student内部类对象  和person1对象里面的内部类对象报错 type mismatch 

    报错原因:由于默认情况下,内部类的作用域是:外部类对象 一定记住是外部类对象*

package com.hadoop.ljs.spark.study/**  * @author: Created By lujisen  * @company ChinaUnicom Software JiNan  * @date: 2020-02-08 22:19  * @version: v1.0  * @description: com.hadoop.ljs.spark.study  */object  PersonTest{  def main(args: Array[String]): Unit = {    val person1=new Person()    val studentA=person1.getStudent("ljs1")
   person1.students+=studentA
   val person2=new Person()    val studentB=person2.getStudent("ljs2")    /*这里person2对象里面的student内部类对象  和person1对象里面的内部类对象报错 type mismatch    * 这里由于默认情况下,内部类的作用域是:外部类对象 一定记住是外部类对象*/    person1.students+=studentB  }}


报错截图:

Scala扩大内部类作用域的方式有哪些

有两种方式来扩大内部类对象作用域:

第一种方式:通过派生类对象

代码实例:

    直接把Student定义在伴生对象object Person中,程序运行正常

package com.hadoop.ljs.spark.studyimport com.hadoop.ljs.spark.study.Person2.Studentimport scala.collection.mutable.ArrayBuffer/**  * @author: Created By lujisen  * @company ChinaUnicom Software JiNan  * @date: 2020-02-08 22:43  * @version: v1.0  * @description: com.hadoop.ljs.spark.study  */object Person2{  class  Student(val name:String){}}class Person2 {  val students=new ArrayBuffer[Person2.Student]  def getStudent(name:String):Student={    return  new Student(name)  }}

主函数类不再报错了:

package com.hadoop.ljs.spark.study/**  * @author: Created By lujisen  * @company ChinaUnicom Software JiNan  * @date: 2020-02-08 22:37  * @version: v1.0  * @description: com.hadoop.ljs.spark.study  */object PersonTest2 {  def main(args: Array[String]): Unit = {    val person1=new Person2()    val studentA=person1.getStudent("ljs1")    person1.students+=studentA
   val person2=new Person2()    val studentB=person2.getStudent("ljs2")    person1.students+=studentB  }}

第二种方式扩大内部类作用域:类型投影

Person类代码:

注意:

     代码第14行,这里用了Person#Student   用的是“#”号 通过类型映射:只要你是外部类的内部类对象我都识别为类型相同*/

package com.hadoop.ljs.spark.study
import scala.collection.mutable.ArrayBuffer/**  * @author: Created By lujisen  * @company ChinaUnicom Software JiNan  * @date: 2020-02-08 22:55  * @version: v1.0  * @description: com.hadoop.ljs.spark.study  */class Person3 {  class  Student(val name:String){}  /*注意这里用了Person#Student   用的是“#”号  通过类型映射:只要你是外部类的内部类对象我都识别为类型相同*/  val students=new ArrayBuffer[Person3#Student]  def getStudent(name:String):Student={    return  new Student(name)  }}

“Scala扩大内部类作用域的方式有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


分享题目:Scala扩大内部类作用域的方式有哪些
标题路径:http://hbruida.cn/article/ppsohp.html