Java package com.easykotlin.lec03_kotlin_extensions; import java.util.List; public class CollectionUtils...; import java.util.ArrayList; import java.util.List; public class JavaDemo { public static void...fun MutableList.swap(src: Int, target: Int) { // 函数的接收者 this val temp = this[src] this...[src] = this[target] this[target] = temp } // 扩展属性 val MutableList.sum: Int get() {...package com.easykotlin.lec03_kotlin_extensions; import java.io.BufferedReader; import java.io.IOException
Java 编程语言通常使用 Utils 类来解决此类问题,但这样的方式并不支持代码自动补全,会让写出的代码比较难以查找,使用起来也不直观。...通过它,您无需使用继承,或创建接收类实例的函数即可为某个类添加功能。同 Java 这类编程语言不同,Android Studio 的自动补全功能是支持 Kotlin 扩展的。...代码中调用扩展函数 扩展函数并不属于我们要扩展的类的一部分,因此当我们在 Java 语言中尝试调用该方法时,并不能在该类的其它方法中找到它。...正如我们稍后所看到的,扩展会在其被定义的文件中反编译成静态方法,并接收一个我们要扩展的类的实例作为参数。以下就是在 Java 中调用 printDogInformation() 扩展函数的示例代码。...在这种情况下,会调用代码库中的扩展函数,而您所得到的唯一信息是您所定义的扩展函数变成了一个未被使用的方法。
Kotlin 能够扩展一个类的新功能而无需继承该类或者使用像装饰者这样的设计模式。 这通过叫做 扩展 的特殊声明完成。 例如,你可以为一个你不能修改的、来自第三方库中的类编写一个新的函数。...在 Android Studio 中,我们可以查看 kotlin 文件的字节码,然后再 Decompile 为 Java 代码。上面我们为 Person 扩展函数转为Java代码后如下。...那在Java代码中能不呢调用呢? PersonExtensionsKt.cook(new Person("Bob")); 竟然也没有报错!...因为将一个 Person 作为入参传入了方法中,所以我们也就可以在方法内对这个 Person 对象进行操作,这也就是在扩展方法中我们可以使用 this 来访问 Person 属性的原因。...总结 在 Java 中,我们要扩展一个类时,常常是继承该类或者用装饰者模式类似的设计模式来实现,Kotlin 扩展函数和扩展属性为这种需求提供了一种新思路,并且也可以作为 Utils 类的另外一种选择
内联扩展函数 apply II . Kotlin 调用 Java API III . apply 内联扩展函数示例 ( 调用 Java API 处理图像 ) I ....闭包代码块 说明 : ① 主要功能 : apply 函数可以指定要执行的代码块 , 再代码块中可以使用 this 访问其调用对象 , 执行完毕后 , 会自动返回该对象 ; ② 调用 T 对象本身 : 使用...Kotlin 调用 Java API ---- Kotlin 与 Java 代码是完全兼容的 , 因为其都是基于 Java 虚拟机的语言 ; Kotlin 中可以调用 Java 语言的类和方法 ; Java...语言中也可以调用 Kotlin 的类和方法 ; 因此 Kotlin 中是可以调用 Java 的 API 函数库的 , 这极大的拓展了 Kotlin 的功能 ; III . apply 内联扩展函数示例...Kotlin 中可以使用 Java 的所有 API , 这里使用 Java 的图像操作 API 进行图像处理 作用 : BufferedImage 作用是在内存中生成图片 , 下面代码的含义是
序 本文主要举几个kotlin如何改善java代码的例子 字符串字面值及模板 字符串字面值 @Test fun testStringLiterals(){ val a = """if...: "empty") } 这个Null Safety太有用了,比起java的三元表达式更简洁一点,在表达式为true的时候就不用重复写要返回的内容,只要写else部分。...Null Safety在流式/链式调用的时候更有用 // 如果 `person` 或者 `person.department` 其中之一为空,都不会调用该函数: person?....head = managersPool.getManager() 小结 本文只是举了kotlin可以改善java代码的几个例子,kotlin太强大了,目标是要替代java。...其中很多设计可以看到scala的影子,但是黑魔法也比较多,学习曲线稍微有点抖,不过如果不使用太高级的语法,也还OK。 doc kotlin reference cn
前言 Kotlin 中类的扩展方法并不是在原类的内部进行拓展,通过反编译为Java代码,可以发现,其原理是使用装饰模式,对源类实例的操作和包装,其实际相当于我们在 Java中定义的工具类方法,并且该工具类方法是使用调用者为第一个参数的...,然后在工具方法中操作该调用者; 理论上来说,扩展函数很简单,它就是一个类的成员函数,不过定义在类的外面。...不管String类是用Java、Kotlin,或者像Groovy的其他JVM语言编写的,只要它会编译为Java类,就可以为这个类添加自己的扩展。 在这个扩展函数中,可以像其他成员函数一样用this。...Kotlin允许用和导入类一样的语法来导入单个的函数: import strings.lastChar //星号导入 import strings.* 3.3.2在Java中调用扩展函数 其实,扩展函数是静态函数...调用扩展函数,不会创建适配的对象或者任何运行时的额外消耗。 这使得从Java中调用Kotlin的扩展函数变得非常简单:调用这个静态函数,然后把接收对象作为第一个参数传进去即可。
测试代码: 1.Java 中直接使用 Java 8 的 Stream API: package i; import java.util.ArrayList; import java.util.List...使用 Java 8 的 Stream API: package i import java.util.* /** * @author: Jack * 2020-05-06 16:03 */...使用Java 8 的 parallel Stream API,似乎没有明显的性能提升(猜测:中间有Java-Kotlin互转带来的性能损耗?)。...3.直接使用Kotlin的 List的API: package i import java.util.* /** * @author: Jack * 2020-05-06 16:03 */...Kotlin的Sequence API package i import java.util.* /** * @author: Jack * 2020-05-06 16:03 */ fun
在Kotlin中,扩展函数是一种非常有用的功能,可以让我们向现有的类添加新的功能,而无需修改类的源代码。在本文中,我们将探讨Kotlin扩展函数的原理和运用,以及如何在Android开发中使用它们。...什么是扩展函数? 扩展函数是Kotlin中的一种特殊函数,它允许我们向一个类添加新的函数,而无需继承或修改这个类的源代码。扩展函数的语法非常简单,只需要在函数名前面加上类名,并用点号隔开即可。...代码复用性更高:使用扩展函数可以让我们在多个类中共享同一段代码,从而提高了代码的复用性。 扩展函数的局限性 尽管扩展函数在许多情况下非常有用,但也存在一些限制。...同时,在使用扩展函数时,需要注意它们的限制并遵循最佳实践。 在Android开发中使用扩展函数 在Android开发中,扩展函数可以帮助我们简化代码,提高开发效率。...以下是一些常见的Android开发场景,可以使用扩展函数来优化代码。 简化findViewById 在Android开发中,我们经常需要使用findViewById来查找布局中的控件。
前言 Kotlin一个强大之处就在于它的扩展函数,巧妙的运用这些扩展函数可以让你写出的代码更加优雅,阅读起来更加流畅,下面总结了在开发中经常用到的一些内联扩展函数。...而在我以往的开发经验中这些函数主要的使用场景有两个,一是非空判断,二是对象的初始化或者本身及方法的频繁调用。 内联和正常函数的区别不在于定义函数的异同点。...实例: 1.在自定义view中当我们初始化画笔时很多时候我们会写下边的代码 var paint = Paint() paint.color = Color.BLACK paint.strokeWidth...表达式,return后面的代码不再执行(注意写法@run) kotlin.run { return@run println("11") println("22") } 结果: I/System.out...在函数内可以通过 it 指代该对象。返回值为函数的最后一行或指定return表达式。 实例:有点类似于run(),let在使用中可用于空安全验证,变量?.
Java 中处理 Kotlin 异常 1、Kotlin 方法中抛出异常处理 2、Java 中调用 Kotlin 异常方法 3、使用 @Throws 注解注明异常 三、Kotlin 与 Java 之间的函数类型互操作...1、Java 调用 Kotlin 中的 匿名函数解决方案 2、Kotlin 中 匿名函数代码示例 3、Java 中 调用 Kotlin 匿名函数代码示例 一、Kotlin 中处理 Java 异常 -..., 在 编译时报错 Unhandled exception: java.io.IOException 因此 , 在 Java 代码中 , 正确的操作是 , 先使用 try catch 代码块捕获该异常...在 Kotlin 中可以 使用 try…catch 代码块 , 捕获 Java 异常 ; 代码示例 : import java.io.IOException fun main() { var...中处理 Kotlin 异常 ---- 1、Kotlin 方法中抛出异常处理 在 Kotlin 的 函数 中 , 抛出异常 ; 如果 在 Kotlin 中 调用 抛出异常 的 Kotlin 函数 , 直接使用
文章目录 一、扩展属性 二、可空类扩展 三、使用 infix 关键字修饰单个参数扩展函数的简略写法 一、扩展属性 ---- 上一篇博客 【Kotlin】扩展函数 ( 扩展函数简介 | 为 Any 超类定义扩展函数...函数 ; 代码示例 : 在该代码中 , 为 String 类型定义了 扩展属性 extAttribute , 由于是 val 只读变量 , 因此必须在其 setter 函数 中进行初始化变量 , 并且...非空类型扩展函数 如果定义的 扩展函数 是为 可空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例...infix 关键字修饰单个参数扩展函数的简略写法 ---- 如果 扩展函数 只有 一个参数 , 并且在 扩展函数 定义时 使用了 infix 关键字修饰 , 在调用该扩展函数时 , 可以省略 接收者与函数之间的点...和 参数列表的括号 ; 调用 使用 infix 关键字修饰 的 单个参数扩展函数 : 接收者 函数名 函数参数 也可以使用 传统方式调用 : 接收者.函数名(函数参数) Map 中 创建 的 Pair
配置 要想实现Springboot使用Kotlin和Java混合编程,需要使用kotlin插件: spring-boot-gradle-plugin kotlin-gradle-plugin 具体配置如下...{ main { kotlin { srcDir "src/main/kotlin" } java { srcDir "src/main/java" }...} test { kotlin { srcDir "src/test/kotlin" } java { srcDir "src/test/java" }...让kotlin代码的归kotlin目录,java代码归java目录 比如说,我们把SpringBoot启动类放到kotlin下面: package com.restfeel import org.springframework.beans.factory.annotation.Autowired...Java代码Kotlin代码互相调用 我们放到后面单独的一章来讲。
关于 Kotlin 开发 使用 Kotlin 开发 Android App 在 Java 工程师群体中变得越来越流行。如果你由于某些原因错过了 Kotlin,我们强烈建议你看一下这篇文章。...对于那些处在技术前沿和喜欢 Kotlin 的开发者来说,本篇文章和他们息息相关。所以,下面就让我们来看一下怎样在 Kotlin 中使用集合吧。 Kotlin中的集合是基于 Java 集合的框架。...我们可以看到,我们在 Kotlin 中几乎可以使用 Java CollectionsKT 类中的所有方法.当然,也需要导入 java.util.* 。...让我们来看一下我们在 Java 代码中怎么调用 Kotlin 集合: java.util.List<Integer list = kotlin.collections.CollectionsKt.listOf...所有扩展函数都可以作为静态方法访问。 总结 Android 开发语言 Kotlin 是一门非常有趣的语言。它能帮助我们编写更加简洁和安全的代码。初次之外,Kotlin 与 Java 兼容。
--- 扩展函数在 Android 中的案例 用扩展函数简化Toast的用法: 这是Toast的标准用法,在界面上弹出一段文字提示,代码很长。...,::add) // 函数引用 --- Lambda Java 在 Java8中引入的Lambda。...Kotlin对此并没有进行限制,但是通常不建议在Lambda 表达式中编写太长的代码,否则可能会影响代码的可读性。 Lambda也可以理解为是匿名函数的简写。...,参数列表的结尾使用一个 '->' 符号 ,表示参数列表的结束以及函数体的开始,函数体中可以编写任意行代码,并且最后一行代码会自动作为Lambda表达式的返回值。...不使用高阶函数 使用高阶函数 定义方 需要额外定义接口 不需要额外定义接口 调用方 代码繁琐 代码简洁清晰 性能 差 借助inline的情况,性能更高 最后总结 思考讨论 本文主要分享了 空安全、扩展函数
HEVC在RTMP中的扩展 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具体修改内容见下。...4.1 FLV规范扩展 HEVC为视频编码格式,因此对FLV规范的扩展,只集中在Video Tag,其它部分,无任何改动。...由第二章节的阐述可知,FLV的解复用和复用功能代码分别在libavformt/flvdec.c和libavformat/flvenc.c中,扩展后的修改也都集中在这两个文件。...HEVC与AVC视频帧在FLV中的存放格式相同,所以只需在读取Video Tag的地方增加AV_CODEC_ID_HEVC的判断条件即可,调整后的代码如下: if (st->codecpar->codec_id...而HVCC 的参数集存储在extradata中(带外传输),使用NALU长度(固定字节,通常为4字节,从extradata中解析)分隔NAL。
`TYPE_FLAG` = 1 或者 SUPPLIER_CLASS=1 实现有两种: 一、使用IF函数 SELECT temp.* FROM (SELECT tp1....SUPPLIER_CLASS`) AS temp WHERE 1 = 1 #AND temp.supplierType = 0 AND temp.supplierClass = 1; 二、使用
Java 9 JShell : ?...e.toUpperCase();}).collect(Collectors.toList()); $6 ==> [A, B, C] jshell> alphabet alphabet ==> [a, b, c] Kotlin...alphabet [a, b, c] >>> alphabet.map{it->it.toUpperCase()} [A, B, C] >>> alphabet [a, b, c] 相比之下, 我们不得不说,Java...8,9中的 Stream API 还是有点啰嗦,绕来绕去。...不如Kotlin来得直截了当,简单优雅。 毕竟,Kotlin 是对 Java 语言的更高层次的抽象封装,相比之下, 只能是 “青出于蓝而胜于蓝”。
关于FindFunc FindFunc是一款功能强大的IDA Pro插件,可以帮助广大研究人员轻松查找包含了特定程序集、代码字节模式、特定命名、字符串或符合其他各种约束条件的代码函数。...简而言之,FindFunc的主要目的就是在二进制文件中寻找已知函数。 使用规则过滤 FindFunc的主要功能是让用户指定IDA Pro中的代码函数必须满足的一组“规则”或约束。...FindFunc随后将查找并列出满足所有规则的所有函数。...FindFunc会以智能化的形式对规则进行计划和排序,功能概述如下: 1、目前有六条规则可用; 2、代码匹配考虑寻址大小前缀和操作数大小前缀; 3、函数识别模块; 4、性能规则的智能调度; 5、以简单ASCII...文件拷贝到IDA Pro的插件目录中即可。
最近在研究中文分词及自然语言相关的内容,关注到JAVA环境下的HanLP,HanLP是一个致力于向生产环境普及NLP技术的开源Java工具包,支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典...封面.jpg 由于自己才疏学浅,对JAVA方面了解不多,所以打算在Python环%2, line 5, in startJVM(getDefaultJVMPath()) File “...(2)也可以使用自定义的HanLP——HanLP由3部分组成:类库hanlp.jar包、模型data包、配置文件hanlp.properties,请前往项目主页下载最新版:github.com/hankcs...Python调用 以下是我的测试:(使用的是Python,与Python3 相比多了 .toString() 这一操作) 配图.JPG
前言 在Python中,format()函数是一种强大且灵活的字符串格式化工具。它可以让我们根据需要动态地生成字符串,插入变量值和其他元素。...本文将介绍format()函数的基本用法,并提供一些示例代码帮助你更好地理解和使用这个函数。 format() 函数的基本用法 format()函数是通过在字符串中插入占位符来实现字符串格式化的。...占位符使用一对花括号{}表示,可以在{}中指定要插入的内容。...下面是format()函数的基本用法: formatted_string = "Hello, {}".format(value) 在上面的示例中,{}是一个占位符,它表示要插入的位置。...位置参数和关键字参数 除了使用位置参数外,还可以使用关键字参数来指定要插入的值。关键字参数可以提高代码的可读性,并允许我们按照需要指定要插入的值的顺序。
领取专属 10元无门槛券
手把手带您无忧上云