Scala扩大内部类作用域的方式有哪些
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容介绍了"Scala扩大内部类作用域的方式有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2025年12月02日Scala扩大内部类作用域的方式有哪些
本篇内容介绍了"Scala扩大内部类作用域的方式有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
内部类初始用户,内部类的作用域属于:外部类对象,不同外部类对象中的内部类对象类型不同会报错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+=studentAval person2=new Person()val studentB=person2.getStudent("ljs2")/*这里person2对象里面的student内部类对象 和person1对象里面的内部类对象报错 type mismatch* 这里由于默认情况下,内部类的作用域是:外部类对象 一定记住是外部类对象*/person1.students+=studentB}}
报错截图:
有两种方式来扩大内部类对象作用域:
第一种方式:通过派生类对象
代码实例:
直接把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+=studentAval person2=new Person2()val studentB=person2.getStudent("ljs2")person1.students+=studentB}}
第二种方式扩大内部类作用域:类型投影
Person类代码:
注意:
代码第14行,这里用了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: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扩大内部类作用域的方式有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
对象
作用
类型
方式
部类
代码
情况
不同
相同
内容
函数
实例
更多
知识
别为
实用
学有所成
接下来
原因
困境
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
帮人买服务器犯法吗
网络安全收集信息
网络安全的利与弊议论文
http什么时候写网络技术
服务器按钮圆圈按钮功能
网络安全事件发布平台
软件开发哪个比较简单易学
客户数据库分析有哪些
国家网络安全产业园海淀大楼
魔兽id数据库
中国历代字体检索数据库
2021年网络安全答题答案
dhcp服务器详细
数据库系统工程师考试大纲第三版
一台服务器挂多个站点
山西app软件开发定制
开封学软件开发
山西开源软件开发要多少钱
3d可视化网络安全吗
Python转行网络安全
词典软件开发
怎么用命令方块生成一个服务器
数据库 脱库
网络安全意识的指标
可将文件上传到远程服务器
什么计算机网络技术软件
什么软件迁移数据库
数据库相关的内容
描述网络安全的模型
广西北斗守时模块服务器