本篇文章给大家谈谈kotlin 实现接口,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享kotlin 实现接口的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Kotlin——集合
Kotlin的集合类由两个接口派生:Collection和Map。Collection和Map是Java集合框架的根接口,这两个接口又包含一些子接口或实现类
Java中的集合都是可变集合,但Kotlin的集合被分为两大类:可变集合和不可变集合。
Kotlin也提供了Map集合。
Kotlin的Map派生了MutableMap接口,代表了一个可变的Map集合。
Kotlin并没有真正为JVM平台实现任何Set集合类通过别名借用了Java集合框架的类,不推荐使用构造器创建Set集合。推荐使用Kotlin提供的工具函数来创建Set集合
Kotlin除了Java原生Set的各种方法之外,Kotlin的Set还扩展了大量方法,在Set集合有很多方法与Array的方法功能相似,例如all、any、associate、drop、filter、find
Kotlin也支持使用for-in循环遍历Set,与遍历数组的基本方式相同
Set集合继承了Iteratable,因此可使用Iterable接口中定义的forEach()方法来遍历集合,该方法需要接受一个Lambda表达式作为参数
由于setOf()方法返回的Set集合是有序的,因此可以通过索引来遍历Set集合,Set集合也提供了indices方法返回集合的索引区间
···
//indices形式遍历
for (i in itSet.indices) {
println(itSet.elementAt(i))
}
···
mutableSetOf()、hashSetOf()、linkedSetOf()、sortedSetOf()函数返回的集合都是可变的,依次是Set、HashSet、LinkedHashSet、TreeSet
List集合的特点:
Kotlin并未真正的实现List集合,只是通过别名借用了Java体系中的ArrayList集合。
mutableListOf()、arraysListOf() 函数返回的List集合都是可变的
与Java相同,Kotlin的Map集合同样用于保存key-value对
与Java不同,Kotlin的Map集合也分为可变的和不可变的
Kotlin并没有真正的为JVM平台实现任何Map集合类。
Map集合由多个key-value组成,因此遍历Map集合时可通过对key-value对进行遍历,也可先遍历key,再通过key获取value遍历
kotlin属性代理
kotlin属性代理官方文档地址: http://kotlinlang.org/docs/reference/delegated-properties.html
kotlin的代理模式需要实现一个接口,而属性代理只需要实现getValue和setValue方法即可。
语法形式: val/var <property name: <Type by <expression
其中 <expression 代理了 <property name 的getValue和setValue方法。
举个🌰:
输出: Example@33a17727, thank you for delegating ‘p’ to me!
当我们给p赋值的时候,setValue会被调用
输出: NEW has been assigned to ‘p’ in Example@33a17727.
自定义属性代理也可以实现ReadWriteProperty、ReadOnlyProperty接口。
当变量第一次被使用时才进行初始化,可以实现懒加载。
lazy方法返回一个Lazy<T对象,入参是一个lambda。
当第一次获取lazyValue的值时,会先初始化lazyValue,然后把值保存起来,下一次获取lazyValue时直接获取保存好的值即可。
输出:
初始化lazyValue的过程默认是线程安全的,通过synchronized锁来保证。
不过这肯定是影响性能的,如果我们确信lazyValue的初始化不会涉及到多线程,那么我们可以传入LazyThreadSafetyMode.NONE来取消同步锁。
LazyThreadSafetyMode有三种模式:SYNCHRONIZED(默认模式)、PUBLICATION、NONE
其中PUBLICATION模式使用了AtomicReferenceFieldUpdater(原子操作)允许多个线程同时调用初始化流程。
变量被赋值时会发出通知。
Delegates.observable可以传入两个参数,一个是初始值,另一个是变量被赋值时的handle方法。
输出:
注意:只要 user.name被赋值,监听事件就会触发。
类似的还有 vetoable() ,只不过vetoable是在赋值前触发,observable是在赋值后触发。
vetoable还可以对赋值操作进行拦截。
输出:
把map中某个key值映射为变量。
输出:
我们可以干预代理类的创建过程。提供provideDelegate方法即可,该方法返回要创建的代理对象。
provideDelegate方法有两个参数,参数1是代理属性所在的类,即image所在的类:MyUI。参数2是代理属性的具体参数对像(包括属性名称,属性类型等等)。
Koin快速入门——Kotlin
本教程可以让你使用Koin框架写一个可以注入和调用你的组件的Kotlin应用。
首先,将 koin-core 在Gradle文件中引入如下:
在我们的实例应用中,我们要定义一下两个组件:
创建一个数据类 HelloMessageData 持有数据:
创建一个 HelloService 接口他的实现类 HelloServiceImpl 来展示和使用 HelloMessageData
要运行 HelloService 组件,需要先创建一个运行时(runtime)组件,让我们写一个 HelloApplication 类继承 KoinComponent 接口,这个接口可以让我们在后面使用的时候调用 by inject() 函数拿到 HelloService 组件。
现在,让我们Koin模块组装 HelloMessageData 和 HelloService 。
我们用关键字 single 声明上面的组件为单例。
从 main 函数启动应用:
关于kotlin 实现接口和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
kotlin 实现接口的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、kotlin 实现接口的信息别忘了在本站进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~