Scala扩大内部类作用域的方式有哪些
发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,本篇内容介绍了"Scala扩大内部类作用域的方式有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2025年01月30日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+=studentA
val 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+=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扩大内部类作用域的方式有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
对象
作用
类型
方式
部类
代码
情况
不同
相同
内容
函数
实例
更多
知识
别为
实用
学有所成
接下来
原因
困境
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全人员定义
中职计算机网络技术卷子
全岛互联网科技有限
云上城之歌服务器加载不出来
数据库数据共享产生的问题
网络安全产品经理出路
数据库开发的原理
网络安全会议 学院
软件开发的业务逻辑是什么
如何用域名连接数据库
免费web邮件服务器
网络技术证书培训学校
基岩版服务器bug教程
网络技术服务要怎么开票
sap服务器数据库
照片和文字的数据库
嵌入式软件开发年薪
数据库建一个库的代码
亳州市好人网络技术有限公司
服务器装不上360wifi
吃鸡在哪个服务器下载
小旋风服务器
数据库群集架构设计项目
上海嵌入式软件开发企业
为了保障网络安全
数据库管理员 软考教程
河南erp软件开发公司
银行软件开发校招面试经验
深信服服务器显示b7
中化能源科技互联网公司