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开发人员不 ...
随机推荐
- kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
以ngxin的配置文件为例子: nginx-deployment.yaml : apiVersion: v1 kind: ConfigMap metadata: name: nginx-cm data ...
- Kubernetes 集群日志管理 Elasticsearch + fluentd(二十)
目录 一.安装部署 Kubernetes 开发了一个 Elasticsearch 附加组件来实现集群的日志管理.这是一个 Elasticsearch.Fluentd 和 Kibana 的组合.Elas ...
- [转帖]Linux中的find(-atime、-ctime、-mtime)指令分析
Linux中的find(-atime.-ctime.-mtime)指令分析 https://www.cnblogs.com/zhangjinjin01/p/5505970.html https://w ...
- Serializer组件
Serializer组件 一 .序列化器-Serializer 作用: 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 反序列化,把客户端发送过来的数据,经过req ...
- adb命令查看连接PC的移动设备
cmd窗口中输入adb应会出现上图情况,如果显示不存在则需要网上下载adb工具并在我的电脑-属性-高级系统设置-环境变量中将adb工具的路径加入PATH,如下图: 输入adb devices 可以看到 ...
- mysql数据库优化实战--日期及IP地址的正确存储方式
- 当base-package="controller.*"时,可见packageSearchPath为"classpath*:controller/*/**/*.class": 当base-package="controller.**"时,可见packageSearchPath为"classpath*:controller/**/**/*.class":
今天在配置Spring的component-scan时,发现了一个有趣的问题.就是在指定base-package时,如果使用了星号通配符*,有时会出现类扫描不到的情况.下面研究一下这个问题. 先介绍一 ...
- [CF896C]Willem, Chtholly and Seniorious
题目大意:有$n$个数,有$m$次$4$种操作: l r x :将$[l,r]$区间所有数加上$x$ l r x :将$[l,r]$区间所有数变成$x$ l r k :输出$[l,r]$区间第$k$大 ...
- 在jenkins中使用shell命令推送当前主机上的docker镜像到远程的Harbor私有仓库
1.jenkins主机上的docker配置 先在Jenkins主机的docke上配置上Harbor私有仓库地址 cat /etc/docker/daemon.json { "insecure ...
- 机器学习 降维算法: isomap & MDS
最近在看论文的时候看到论文中使用isomap算法把3D的人脸project到一个2D的image上.提到降维,我的第一反应就是PCA,然而PCA是典型的线性降维,无法较好的对非线性结构降维.ISOMA ...