Scala进阶:扩大内部类作用域的两种方式:伴生对象、类型投影

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

实例代码:

注意:

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

package com.hadoop.ljs.spark.study

主函数:

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

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

package com.hadoop.ljs.spark.study

报错截图:

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

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

代码实例:

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

package com.hadoop.ljs.spark.study

主函数类不再报错了:

package com.hadoop.ljs.spark.study

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

Person类代码:

注意:

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

package com.hadoop.ljs.spark.study

    主函数我这里就不在写了,跟PersonTest代码相同,有兴趣的同学可以自己动手练一练。

本文分享自微信公众号 - 大数据开发运维架构(JasonLu1986)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Android 开发必备知识点及面试题汇总(Android+Java+算法+性能优化+四大组件……)

JAVA相关1.静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它?静态内部类:使用stat

Java中的静态内部类学习记录

一、静态内部类:1.静态内部类,静态内部类对象可以不依赖于外部类对象,直接创建。 2.静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过实例对象实例。3.静态内部类对象实例时,可以不依赖于外部类对象4.可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员。5.当内部类属性与外部类属性同名时,默认直接

(翻译)Java SE 8 Lambda 特性与基本原理(下)

6,词法域(Lexical Scoping)确定内部类中变量名字(包括this)的意义要比在顶级类中困难的多,并且很容易出错。继承成员包括类对象中的方法可能不小心就覆盖了外部类的声明, 未加限定的this引用总是指向外部类自身。Lambda表达式更加简单:他们不会从超类中继承任何名字,也不会引入任何新的级别的作用域。相反,他们