注意到Kotlin的字符串类也叫String,那么String在Java和Kotlin中的用法有哪些差异呢?这便是本文所要阐述的内容了。 ...0, origin_trim.indexOf('.')) } 在这些字符串处理方法里面,唯一的区别是split方法的返回值,在Java中,split方法返回的是String数组,即String...[];但在Kotlin中,split方法返回的是String队列,即ListString>。...下面是Kotlin使用split方法的示例代码: btn_split.setOnClickListener { var strList:ListString> = origin.split...(result); 现在使用Kotlin实现上述需求,就简单多了,因为Kotlin允许直接通过下标访问指定位置的字符,代码如下: tv_convert.text = origin[number
Mybatis Dao 接口中,单参数,多参数,如何正确使用 @Param? 答:单参数、多参数下,都可以用注解或不用注解。...多参数下,建议使用注解,方便后期调式,如果不用注解必须使用 0,1… 索引 或者 param1,param2… 源码分析 如何初始化,请看该篇文章《从面试题来看源码》,Dao 接口的工作原理 首先还是来看...MapperProxy 代理类调用的时候执行的 invoke 方法 MapperProxy.java @Override public Object invoke(Object proxy, Method... method, Object[] args) throws Throwable { try { //如果目标方法继承自Object,则直接调用目标方法 if (Object.class.equals...处理 Mapper 接口中定义方法的参数列表 ParamNameResolver.java public ParamNameResolver(Configuration config, Method
关于Play Core Library具体如何使用,大家看下文档,本文主要讲解一些原理性知识点。 主工程模块app,首先分析MainActivity.kt文件。...: split dir : /data/app/com.google.android.samples.dynamicapps.ondemand-1/split_java.apk D/DynamicFeatures...: split dir : /data/app/com.google.android.samples.dynamicapps.ondemand-1/split_native.apk 从运行结果可知,split...SetString> getInstalledModules(); 因为Play Core Library非对外暴露接口都是混淆过的,因此就不直接附源码分析。...split apks资源加载在SplitCompat#a(boolean)方法有反射调用AssetManager#addAssetPath(String)。
本章内容包括: 用于处理集合、字符串和正则表达式的函数 使用命名参数、默认参数,以及中辍调用的语法 通过扩展函数和属性来适配Java库 使用顶层函数、局部函数和属性架构代码 1、在Kotlin中创建集合...的调用 * 默认输出 [1,2,3] * 想要效果 (1;2;3) * * joinToString() 的基本实现 * 通过在元素中间添加分割符号,从直接重写实现函数开始...,然后再过渡到Kotlin更惯用的方法来重写。...last() /*---------------3.2、从Java中调用扩展函数---------------*/ // java --> StringUtil.lastChar...类似 * 不同点: * - java 使用的是 三个点 * - kotlin 使用的是 vararg *
= 0 Kotlin声明语句是“变量名”:“变量类型”,而不是Java常见的“变量类型 变量名”这种格式,在这里你会惊奇的发现Kotlin与Java正好相反,Kotlin声明完毕无需分号,直接回车即可...与Java方式对比 (2)字符串的常用方法 Kotlin方法基本兼容Java相关的方法,比如查找指定位置的字串indexOf方法,截取某指定位置字串的方法substring,或者替换字串的操作所调用的...replace,对于特定的字符分割操作split方法。...(0,text.indexOf(".")) } split方法的使用,在java中split返回的是Sting数组,但是在Kotlin中split返回的则是Sting类型的队列,List...,没办法编译,更不能产生NullPointErexception了 (2)先判断后使用 可空类型的变量不允许直接调用方法或者属性,但是可以先判断该变量不为null,然后再调用该变量的方法或者属性。
类的继承和实现很简单,使用:即可 Kotlin每个句子都不需要加分号(;) 空指针安全 空指针(NullPointerException或NPE)是我们使用Java开发程序中最常见的崩溃了。...如下面的代码就是Kotlin实现空指针安全的一个例子,而且相对Java实现而言,简直是一行代码搞定的。 fun testNullSafeOperator(string: String?)...(ButterKnife Kotlin版),RxKotlin,Anko等等,当然还有已经存在的很多Java的库都是可以使用的。...关于团队转用Kotlin的方法,一般比较行得通的办法是自上而下的推行。这就意味着要么直接的技术负责人比较开明要么就是需要有人来不断推介来影响团队。...做个比较现实的比拟,Java就像是一趟从我的家乡保定开往北京西的耗时将近2个小时甚至更长的普通列车,而Kotlin则是那趟仅需40分钟就能到达的高铁。
本文面向有 Java 背景的开发者,分析为何迁移到 Kotlin 很有吸引力,并给出实际代码示例与可执行的迁移策略:什么时候直接改、什么时候保持 Java、如何逐步混合迁移、以及常见陷阱与优化建议。...一、为什么考虑从 Java 迁移到 Kotlin1. 语言现代性与表达力更强Kotlin 提供了更简洁的语法(如 data class、扩展函数、属性语法),能用更少的代码表达相同逻辑,减少样板代码。...扩展函数Kotlin 可以给现有类添加新方法而无需继承/工具类:fun String.capitalizeWords(): String = split(" ").joinToString(" "...Kotlin 调用 Java(通常无需额外配置)Kotlin 可以像调用 Kotlin 类一样直接调用 Java 的类与方法,但要注意 Java 的可空性(Kotlin 会把 Java 类型视作平台类型...平台类型与空指针Java 类型到 Kotlin 会变成平台类型(String!),若不小心转换为非空类型会隐藏 NPE 风险。解决:显式使用 ? 并添加 null 检查。2.
Kotlin的原则就是Java已经有的,好用的就直接使用,没有的或者不好用的,就在原有类的基础上进行封装扩展,例如Kotlin 就给 File 类写了扩展函数。...从终端读取数据也很简单,最基本的方法就是全局函数readLine,它直接从终端读取一行作为字符串。如果需要更进一步的处理,可以使用Kotlin提供的各种字符串处理函数来处理和转换字符串。...那么并发如何在Kotlin中工作呢?放心,Kotlin 既然是站在 Java 的肩膀上,当然少不了对多线程编程的支持——Kotlin通过封装 Java 中的线程类,简化了我们的编码。...同时我们也可以使用一些特定的注解, 直接使用 Java 中的同步关键字等。下面我们简单介绍一下使用Kotlin 进行多线程编程的相关内容。...本章小结 Kotlin 是一门工程实践性很强的语言,从本章介绍的文件IO、正则表达式以及多线程等内容中,我们可以领会到 Kotlin 的基本原则:充分使用已有的 Java 生态库,在此基础之上进行更加简单实用的扩展
这个目录里面会有从你的 Kotlin 源码生成的 Java 源码,注解处理器后面会跟据这些源码去做注解处理,这实际上就是 kapt 的原理啦,如果你之前看到过官方写的介绍 kapt 原理的文章,里面说的...如何在注解处理器内识别 Kotlin 代码 既然都是 Java 文件,那么我怎么在注解处理器内识别出来哪些代码是 Java 的,哪些是 Kotlin 的呢?...= null; 一旦能够识别出来注解标注的类是 Kotlin,那么我们就可以采用一些 Kotlin Style 的方式生成代码,例如本来如果是 Java 源码,我会生成这样的一个方法: public class...注意 Kotlin 的类型 我们一再提到注解处理器只认识 Java,所以就算你用 Kotlin 定义了一个方法如下: fun hello(a: Int, b: String){ ... } 如果我们用注解处理器处理它的时候...小结 简单来说,为 Kotlin 提供 apt 服务,无论从编译器(kapt)还是从注解处理器的开发者来讲,你必须都得装作你写的和用的都是 Java 才行。 ?
2.jpg 这里的意思,就是说Kotlin的String.nativeIndexOf是直接调用Java的String.indexOf(Kotlin与Java 100%兼容)。...如果把StringsJVM.kt这个文件,浏览一遍,我们会发现Kotlin的String里的方法,大部分都是直接调用Java的String里的方法,从这里看到Kotlin复用了很多Java的api。...说到这里,大家应该明白了,Kotlin的String方法是通过方法扩展的方式,散落在不同的kt文件里,且大部分是复用Java逻辑的。 我们接着看和String相关的其他源码文件。...3.jpg 从源码看,这个接口简单定义了可读String的基本行为,length/get/subSequence。...上源码截图: 7.jpg 看到这张截图,是不是更简单粗暴了?直接整个类都是java.lang.StringBuilder的别名,Kotlin真是太机智了。
9.1 文件 IO 操作 Kotlin IO 操作的 API 在 kotlin.io 包下。Kotlin的原则就是Java已经有好用的就直接使用,没有的或者不好用的,就在原有类的基础上进行功能扩展。...Kotlin的Any类似于Java的Object,但是没有wait(),notify()和notifyAll() 方法。 那么并发如何在Kotlin中工作呢?...同时我们也可以使用一些特定的注解, 直接使用 Java 中的同步关键字等。下面我们简单介绍一下使用Kotlin 进行多线程编程的相关内容。...9.5.1 创建线程 我们在 Java中通常有两种方法在Java中创建线程: 扩展Thread类 或者实例化它并通过构造函数传递一个Runnable 因为我们可以很容易地在Kotlin中使用Java类,...本章小结 Kotlin 是一门工程实践性很强的语言,从本章介绍的文件IO、正则表达式以及多线程等内容中,我们可以领会到 Kotlin 的基本原则:充分使用已有的 Java 生态库,在此基础之上进行更加简单实用的扩展
Java 中正则表达式如何匹配竖线(|) 在Java中直接调用String的split方法: val b = java.lang.String(a) val s3 = b.split("...的转移字符,要让其在正则中起作用,就得使用: "\|" val b = java.lang.String(a) val s3 = b.split("|") println(JSON.toJSONString...s4)) // ["abc","1234"] 这个Java 中的 split 方法设计简直就是一个"天坑"(天然的坑): 如果不看实现代码,很容易犯错. public String[] split(String...regex) { return split(regex, 0); } public String[] split(String regex, int limit) {...} return Pattern.compile(regex).split(this, limit); } 在Kotlin 中, 直接优化了这个 split 方法: val
问题背景 有同学反馈,有一个项目从 kotlin 1.2 升级到 kotlin 1.3 以后 Spring 项目无法启动,报 java.lang.IllegalStateException: Ambiguous...mask,告诉后面的逻辑,特定位置的参数是否需要使用默认值。...我们来看我们当前用的 Spring 版本是如何处理方法扫描的,通过调试我们进入到了这个方法 可以看到 Spring 4.3.10 版本判断是否是用户自己写的方法时的逻辑是方法不是 bridge 且方法不处于...如何解决 那这么严重的问题,难道 kotlin 不解决吗?...Kotlin 编译器源码探秘 有了实验的结果,反过来寻找原因就很简单了,找到 kotlin 1.2 的源码,然后翻一翻源码,马上找到了对应的逻辑。
1.2变量转换 Kotlin中进行数据转换和Java中不同,就不一一对比了,直接说Kotlin中如何进行数据类型转换,Kotlin中都是使用类型转换函数来进行数据类型转换的,让我们来认识一下,如下表 Kotlin...中是不一样的,Kotlin中不存在名为StringArray的数组类型,因为String是一种特殊的基本数据类型,要想在Kotlin中声明字符串数组,得使用ArrayString>类型,同时,分配字符串数组的方法也变成了...与Java中是有区别的,如下: (1)获取数组长度,Java使用**.length**,Kotlin使用**.size**(PS:前面有一个点) (2)获取指定位置的数组元素,Java通过方括号加下标来获取...,比如“ string_array[2]”(PS:获取该数组的第三个元素,下标是从0开始的),Kotlin也能通过方括号加下标来获取指定元素,不过Kotlin还有get和set两个方法,通过get方法获取元素值...代码中,我们频繁用到了 $ ,美元符号,它在Kotlin中属于特殊字符,因此不能直接打印,需要经过转义后方可打印,转义的方法是使用${’***’}表达式,该表达式外层的“ ${‘’} ”为转义声明,内层的
Kotlin Flow 是什么? Kotlin Flow 解决了什么问题? Kotlin Flow 如何在 MVVM 中使用?...Kotlin Flow 如何与 Retrofit2 + Room 混合使用?...LiveData,以至于在很多开源的 MVVM 项目中也是直接使用 LiveData,但是在 Repositories 或者 DataSource 中直接使用 LiveData 这种做法对吗?...Kotlin Flow 在 ViewModel 中的使用 在 ViewModel 中使用 Flow 之前在 Jetpack 成员 Paging3 实践以及源码分析(一) 文章也有提到, 这里我们在深入分析一下...PokemonGo/app/src/main/java/com/hi/dhl/pokemon/ui/detail/DetailViewModel.kt 方法一 在 LifeCycle 2.2.0 之前使用的方法
后来就开始调研如何自己做自定义规则,支持Kotlin的静态代码扫描工具主要有以下几种: Ktlint:只支持代码风格检查,如果要支持代码性能检查的话,需要大量扩展代码性能规则集。...支持Kotlin和Java等多种语言,支持扩展规则集。...因为我们的项目其实是使用了Kotlin和Java混合开发,项目中有相当一部分使用Java开发的代码,而lint能同时支持Java和Kotlin,所以最后我们选择了lint。...=$filter $revision $baseline").split('\n'))} // 计算两个git分支之间的差异文件static ListString> diffFileListFromTwoBranch...那继续看LintGradleExecution的创建时机,在ReflectiveLintRunner().runLint()方法中,源码如下: fun runLint
本章为学习和使用这一新兴的语言做准备,并讨论在一些常见开发环境中运行 Kotlin 程序的方法。...不论如何,重要的是 Java 和 Kotlin 之间的互操作性:Kotlin 可以调用 Java,反之亦可。...可以根据弹出窗口中提示的(或直接在 JetBrains 插件市场搜索)下载链接,使用国内网盘的离线下载功能,下载到网盘后再从网盘下载到本地。...细心查看代码,Kotlin 创建对象的时候并不需要new关键字,而是像调用普通方法一样直接调用构造方法就可以了。...1.5 编码风格 有关编码风格的一点建议,同 Java 类似,使用驼峰命名法,类名首字母大写,每个单词的首字母大写;方法和属性变量首字母小写;采用四个空格缩进。
那么今天一起来说说如何让你的回调更具kotlin风味: 1、Java中的回调实现 2、使用Kotlin来改造Java中的回调 3、进一步让你的回调更具Kotlin风味 4、Object对象表达式回调和DSL...8、DslListenerBuilder插件源码和Velocity模板引擎基本介绍 9、总结 一、Java中的回调实现 Java中的回调一般处理步骤都是写一个接口,然后在接口中定义一些回调函数;然后再暴露一个设置回调接口的函数...Kotlin来改造Java中的回调 针对上述Java中的回调写法,估计大部分人转到Kotlin后,估计会做如下处理: 1、如果接口只有一个回调函数可以直接使用lamba表达式实现回调的简写。...中回调,有不少的Kotlin的小伙伴在公众号留言向我吐槽过,感觉这样的写法是直接从Java中的翻译过来的一样,完全看不出Kotlin的优势在哪。...风格,所以DSL配置回调更胜一筹 2、使用上对比 使用上DSL有个明显优势就是对于不需要监听的回调函数可以直接省略,而对于object表达式是直接实现一个接口回调必须重写,虽然它也能做到任意选择自己需要方法回调
通过一个个真实的场景,我们一边解决问题一边学习Kotlin的特性。 快速上手 如果不知道如何在Kotlin中写一个相当简单的Java表达式。...它是高度互操作性的:你可以继续使用所有用Java写的代码和库,甚至可以在一个项目中使用Kotlin和Java两种语言混合编程。一行Java一行Kotlin,别提有多风骚了。 详细实例 1....我们看看println方法源码,可以看到println接收一个Any类也就是任意类型,而且返回值为空(Kotlin中空类型为Unit类,此处源码省略了返回值类型声明),所以完全符合map方法的要求。...事件 在Java中,每次我们去声明一个点击事件,都不得不去实现一个内部类,而在Kotlin中,可以直接声明我们要做什么。...编译速度对比 我不会试图比较一行代码的编译速度;相反,比较的是将代码从Java转换为Kotlin是否会影响其总体构建的时间。
案例源码: // 使用List ListString> list = new ArrayList(); list.add("Java"); list.add(1, "Kotlin"); // 插入指定位置...案例源码: // 使用HashSet SetString> hashSet = new HashSet(); hashSet.add("Java"); hashSet.add("Kotlin");...案例源码: // 使用增强型for循环遍历List ListString> list = new ArrayList(); list.add("Java"); list.add("Kotlin")...案例源码: // 将List转换为Set ListString> list = Arrays.asList("Java", "Kotlin", "Java"); SetString> set = new...案例源码: // 使用Stream对List进行过滤和映射 ListString> words = Arrays.asList("Java", "Kotlin", "Scala", "Groovy")