![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
kotlin
kotlin
闫文敬
Android开发工程师、安全工程师
展开
-
通过插件去除Kotlin混淆去除 @Metadata标记
在某些Kotlin类文件编译后会留下@Metadata 注解,其中包含重要信息,导致混淆无用。目前尝试的是将本地项目移动到unmeta项目进行发布aar的方式,是可以使用的。插件,能够在打包时移除class中的Metadata标签信息。原创 2023-09-19 11:23:27 · 833 阅读 · 0 评论 -
kotlin扩展函数的原理
扩展函数的本质是一个对应 Java 中的静态函数,这个静态函数参数为接收者类型的对象,然后利用这个对象就可以访问这个类中的成员属性和方法了,并且最后返回一个这个接收者类型对象本身。这样在外部感觉和使用类的成员函数是一样的。另外,扩展函数与成员函数的相同点和不同点也是扩展函数中的重点。// 这个类名就是顶层文件名+“Kt”后缀public final class ExtendsionTextViewKt { // 扩展函数 isBold 对应实际上是 Java 中的静态函数,并且传入一个接收者类型对原创 2022-02-23 15:41:04 · 2400 阅读 · 0 评论 -
kotlin JvmField JvmStatic
@JvmField注解,例如告诉编译器不要生成getter和setter,而是生成Java中成员。在伴生对象的作用域内使用该注解标记某个成员,它产生的副作用是标记这个成员不在伴生对象内部作用域,而是作为一个Java最外层类的静态成员存在。从Kotlin的角度来看,这没有什么太大区别,但是如果你看一下反编译的字节代码,你就会注意到伴生对象以及他的成员都声明和最外层类的静态成员处于同一级别。@JvmStatic.这个注解允许你调用伴生对象中声明的方法就像是调用外层的类的静态方法一样。但是需要注意的是:在这种情原创 2022-02-23 14:42:11 · 2060 阅读 · 0 评论 -
kotlin 单例
class KLazilyDCLSingleton private constructor() : Serializable {//private constructor()构造器私有化 fun doSomething() { println("do some thing") } private fun readResolve(): Any {//防止单例对象在反序列化时重新生成对象 return instance } c原创 2022-02-23 11:22:02 · 1635 阅读 · 0 评论 -
Kotlin之let、with、run、apply、also函数的使用
在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数class ExampleUnitTest { class User constructor(var name: String, var age: Int) @Test fun testLet() { val user = User("张三", 2) var userNull: User? = null user.let {原创 2022-02-21 16:13:41 · 1523 阅读 · 0 评论 -
顺序操作符
reverse 返回一个与指定list相反顺序的list。 val unsortedList = listOf(3, 2, 7, 5) assertEquals(listOf(5, 7, 2, 3), unsortedList.reverse()) sort 返回一个自然排序后的list。 assertEquals(listOf(2, 3, 5, 7), unsortedList.sort()) sortBy 返回一个根据指定函数排序后的list。 assertEqual原创 2022-02-16 17:36:11 · 203 阅读 · 0 评论 -
生产操作符
merge 把两个集合合并成一个新的,相同index的元素通过给定的函数进行合并成新的元素 作为新的集合的一个元素,返回这个新的集合。新的集合的大小由最小的那个集合 大小决定。 val list = listOf(1, 2, 3, 4, 5, 6) val listRepeated = listOf(2, 2, 3, 4, 5, 5, 6) assertEquals(listOf(3, 4, 6, 8, 10, 11), list.merge(listRepeated ) { i原创 2022-02-16 17:35:41 · 173 阅读 · 0 评论 -
元素操作符
contains 如果指定元素可以在集合中找到,则返回true。 assertTrue(list.contains(2)) elementAt 返回给定index对应的元素,如果index数组越界则会抛 出 IndexOutOfBoundsException 。 assertEquals(2, list.elementAt(1)) elementAtOrElse 返回给定index对应的元素,如果index数组越界则会根据给定函数返回默认值。 assertEquals(2原创 2022-02-16 17:32:36 · 84 阅读 · 0 评论 -
映射操作符
flatMap 遍历所有的元素,为每一个创建一个集合,最后把所有的集合放在一个集合中。 assertEquals(listOf(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7), list.flatMap { listOf(it, it + 1) }) groupBy 返回一个根据给定函数分组后的map。 assertEquals(mapOf("odd" to listOf(1, 3, 5), "even" to listOf(2, 4, 6)), list原创 2022-02-16 17:26:03 · 151 阅读 · 0 评论 -
过滤操作符
drop 返回包含去掉前n个元素的所有元素的列表。 assertEquals(listOf(5, 6), list.drop(4)) dropWhile 返回根据给定函数从第一项开始去掉指定元素的列表。 assertEquals(listOf(3, 4, 5, 6), list.dropWhile { it < 3 }) dropLastWhile 返回根据给定函数从最后一项开始去掉指定元素的列表。 assertEquals(listOf(1, 2, 3, 4), li原创 2022-02-16 17:23:58 · 201 阅读 · 0 评论 -
总数操作符
any 如果至少有一个元素符合给出的判断条件,则返回true。 val list = listOf(1, 2, 3, 4, 5, 6) assertTrue(list.any { it % 2 == 0 }) assertFalse(list.any { it > 10 }) all 如果全部的元素符合给出的判断条件,则返回true。 assertTrue(list.all { it < 10 }) assertFalse(list.all { it % 2 ==原创 2022-02-16 17:03:48 · 514 阅读 · 0 评论