Kotlin对象表达式深入解析
嵌套类与内部类巩固:
在上一次https://www.cnblogs.com/webor2006/p/11333101.html学到了Kotlin的嵌套类与内部类,回顾一下:

而对于嵌套类:

归根结底就是因为静态的类只能去访问静态的成员,所以,一个嵌套类其实是可以访问另一个同层次的嵌套类的,因为它本身就是静态的嘛,如下:

所以“嵌套类不能访问外部类的其他成员,只能访问另一个嵌套类”。
下面继续来探究嵌套类与内部类的东东,如何在一个类的外面来声明和创建嵌套类或内部类的对象呢?下面瞅下:

接下来瞅一下内部类的情况:

其实这俩的使用在上一次的学习中已经学过了,这里再来对其进行巩固一下。
对象表达式【object expression】:
这个是Kotlin提供的一个特别重要的一个特性,在Android kotlin的开发中会大量使用它,所以需要好好学习,先来看一下对象表达式是啥?Java当中匿名内部类在很多场景下都得到了大量使用,Kotlin的对象表达式就是为了解决匿名内部类的一些缺陷而产生的。先来回顾一下在Java中匿名内部类的特点:
1、匿名内部类是没有名字的类。
2、匿名的内部类一定是继承了某个父类,或是实现了某个接口。
3、Java运行时会将该匿名内部类当做它所实现的接口或是所继承的父类来看待。
而在我们Android开发中对于各个View的事件监听全是采用匿名内部类的方式,所以是非常重要的概念,下面来看一下Kotlin对象表达式的语法格式:

接下来则用代码来演练一下,先定义一个接口和抽象类:

然后接下来使用一下:

其中报错了,其实也能猜出啥错误:


是不是从这个对象表达式就看到了以前Java匿名内部类的身影了?是的,接下来继续修改程序,不同点就出来啦,在Kotlin匿名内部类是可以不去实现任何接口的,如下:

这个确实是跟Java不一样了,这段代码别看简单,其实是有一些隐晦的东东,在之后再来揭露,继续修改:

很明显Kotlin为我们打开了Java的一些限制,在Java的匿名内部类一定是继承了某个父类,或是实现了某个接口,不可能既实现某个接口又继承某个父类。接下来咱们再将里面的方法给实现:

Kotlin对象表达式深入解析的更多相关文章
- Kotlin对象表达式要点与Lambda表达式
Kotlin对象表达式要点揭密: 在上一次https://www.cnblogs.com/webor2006/p/11352421.html中学习了Kotlin的对象表达式,它主要是解决Java中匿名 ...
- Kotlin 对象表达式和对象声明
Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类. 对象表达式 通过对象表达式实现一个匿名内部类的对象用于方法的参数中: window.ad ...
- 【手撸一个ORM】第六步、对象表达式解析和Select表达式解析
说明 一个Orm自然不仅仅包含条件表达式,还会有如下的场景: OrderBy(s => s.StudentName) Select<StudentDto>(s => new S ...
- 轻量级表达式树解析框架Faller
有话说 之前我写了3篇关于表达式树解析的文章 干货!表达式树解析"框架"(1) 干货!表达式树解析"框架"(2) 干货!表达式树解析"框架" ...
- 干货!表达式树解析"框架"(1)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 关于我和表达式树 其实我也没有深入了解表达式树一些内在实现的原理 ...
- 干货!表达式树解析"框架"(2)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 为了过个好年,我还是赶快把这篇完成了吧 声明 本文内容需要有一定 ...
- 干货!表达式树解析"框架"(3)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 这应该是年前最后一篇了,接下来的时间就要陪陪老婆孩子了 关于表达 ...
- 表达式树解析"框架"
干货!表达式树解析"框架"(2) 为了过个好年,我还是赶快把这篇完成了吧 声明 本文内容需要有一定基础的开发人员才可轻松阅读,如果有难以理解的地方可以跟帖询问,但我也不一定能回 ...
- Kotlin对象:仅一行代码就可创建安全的单例
作者:Antonio Leiva 时间:Jun 20, 2017 原文链接:https://antonioleiva.com/objects-kotlin/ Kotlin对象是Android开发人员不 ...
随机推荐
- Rufus软件
Rufus软件(https://rufus.akeo.ie/)——制作启动盘必备,简易且开源.
- Oracle Spatial 中的弧段及弧相关拓扑错误
1.报告说明 此报告用于验证下列问题: ORACLE SPATIAL 0.05m的最小拓扑容差值是否可以被修改 原始数据通过ARCGIS入库数据精度是否有损失 修改ORACLE SPATIAL图层的最 ...
- 超简单的react和typescript和引入scss项目搭建流程
1.首先我们先创建一个react项目,react官网也有react项目搭建的命令 npx create-react-app my-app cd my-app 2.安装我们项目需要的样式依赖,这个项目我 ...
- 【转帖】MySQL用得好好的,为什么要转ES?
MySQL用得好好的,为什么要转ES? http://developer.51cto.com/art/201911/605288.htm Elasticsearch作为一款功能强大的分布式搜索引擎,支 ...
- new/delete与命名空间
目录 1. new/delete 2. 命名空间 1. new/delete C++中的动态内存分配 C++通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 delete关键字 ...
- FIFO形成3x3矩阵
Verilog生成矩阵一般是使用shift_ip核,但其实用两个FIFO也行.最近刚好学到这种方法,把原理总结一下. 要求 现在有10x5的数据和对应数据有效指示信号,数据为0~49,要用FPGA对其 ...
- CCF 2016-12-1 中间数
CCF 2016-12-1 中间数 题目 问题描述 在一个整数序列a1, a2, -, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数.在一个序列中,可能存在多个下标不相 ...
- SQL Server 2012使用日常
SQL Server 2012个人使用日常(持续完善中) 1.查询筛选 2.修改数据
- docker 执行 docker system prune 导致Azure Devops build镜像失败
运行docker的centos上, 只分配了16G的空间, 装了个mysql, 还有个rancher, 就只剩下2G的空间了, Azure Devops build镜像就出错了, 显示存储空间不足, ...
- MySQL安装后的初始优化
mysql数据库在安装之后,有一些内置的库(test库).用户(如root@localhost.localdomain)是不需要的,而且在Linux系统上,yum安装的mysql是默认无root密码的 ...