Kotlin内部类
一、内部类:
定义在类内部的类
与类成员有相似的访问控制
kotlin 默认是静态内部类,非静态用inner关键字
this@outter,this@inner的用法
二、匿名内部类
没有定义名字的内部类
类名编译时生产,类似Outter$1.class
三、看一下Java中的内部类
package net.println.kotlin.chapter4.innerClass;
/**
* @author:wangdong
* @description:Java中的内部类
*/
/**外部内*/
public class InnerClassJava {
private int a;
//静态内部类和非静态内部类的区别
//非静态内部类,持有外部类的状态的
public class Inner{
public void hello(){
//可以访问到外部类的成员变量
System.out.println(a);
System.out.println(InnerClassJava.this.a);
}
}
//静态内部类
public static class StaticInner{
public void hello(){
//不能访问外部类的成员变量
//System.out.println(a);
}
}
public static void main(String[] args) {
//如果要实例化非静态内部类Inner
//Inner inner = new Inner(); //这样肯定是不行的
//如果是静态内部类就可以随便new了
//Inner inner = new Inner();
//首先要实例化外部类
InnerClassJava innerClassJava = new InnerClassJava();
//再用外部类的实例去new内部类
Inner inner = innerClassJava.new Inner();
//在Java里面写一个匿名内部类
View view = new View();
//在java中,匿名内部类就能继承一个类,不能实现接口
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick() {
}
});
}
}
四、看一下Kotlin中的内部类
package net.println.kotlin.chapter4.innerClass
/**
* @author:wangdong
* @description:
*/
/**外部类*/
open class Outter{
val a: Int = 0
//默认静态内部类
//不能访问外部类的成员变量
class StaticInner{
fun hello(){
//println(a)
}
}
//非静态内部类,关键字inner
//可以访问外部类的成员变量
inner class Inner{
fun hello(){
println(a)
println(this@Outter.a)
}
}
}
/**定义一个点击监听的接口*/
interface OnClickListener{
fun onClick()
}
/**定义一个View类*/
class View{
//可变的
var onClickListener: OnClickListener ?= null
}
fun main(args: Array<String>) {
//静态内部类实例化
val staticInner = Outter.StaticInner()
//非静态内部类实例化
val inner = Outter().Inner()
//注册view
val view = View()
//这边涉及到一个匿名内部类,就是没有名字的内部类,继承一下Outter类
//kotlin中匿名内部类,就和普通的类一样,可以继承一个类,实现多个接口
view.onClickListener = object: Outter(),OnClickListener{
override fun onClick() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
}
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
ZooKeeper客户端编程(三)
前面说了一些ZooKeeper理论上的内容,对于实践部分,想必都是跃跃欲试。这里我想主要介绍几个Java的demo来起到抛砖引玉的作用,Zookeeper客户端框架具体的细节部分若深入起来不是三言两语能解释的完的,我适当的说明一些,深入的研究还望一起努力。 图与文无关 假设你已经对zkCli的基本命令较熟悉了: create 创建节点 delete 删除节点 exists 判断节点是否存在 getChildren 获取节点下的所有子节点 getData 获取节点的数据 setData 在节点写入或更新数据 getACL 获取某节点的ACL setACL 设置某节点的ACL sync 同步某客户端znode的状态 准备 电脑上有Java开发环境 maven,下载ZooKeeper Java客户端的源码 浏览器 ,ZooKeeper API文档(http://zookeeper.apache.org/doc/r3.4.6/api/index.html) Java案例 列出指定节点下的内容 public class ZooState { public static void main(Str...
-
下一篇
我发现我不懂你了_JUC
首先第一眼看到JUC是不是很惊喜很意外,没错我第一次看到别人写JUC这个缩写我也是同样的反应,JUC全称为java.util.concurrent包,基本上java当中多线程必须会面对的。 今天要说的这个问题,其实是跟组内某大神一起排查问题的时候发现的一个问题,整个问题其实比较复杂,但是核心点和排查的关键我觉得合起来就下面两个部分:ThreadPoolExecutor和countdownlatch的理解是否到位。 业务背景 1、拥有单个工作线程的线程池,如:ExecutorService executorService = Executors.newSingleThreadExecutor(); 2、线程池负责执行runable对象且该对象内部是一个从阻塞队列取任务进行消费的逻辑,消费完成后会countdownlatch.countDown() 3、外部采用countdownlatch.await()的方式监控任务是否完成。 技术背景 首先ThreadPoolExecutor这个大家肯定很熟悉,崩溃是面试别人或者被其他人面试都会遇到这个问题,然后基本上我...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL数据库中FOR UPDATE的使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker容器配置,解决镜像无法拉取问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,7,8上安装Nginx,支持https2.0的开启

微信收款码
支付宝收款码