当前位置: 首页 > 后端技术 > Java

从Java到Kotlin——介绍Kotlin

时间:2023-04-01 18:16:09 Java

B站视频:https://www.bilibili.com/video...语法层面的Nullable对象(类似C#的enabled)Int和Int?是两种不同的类型;字符串和字符串?也是两种不同的类型(前者是后者的子类型)vara:Int=0;varb:Int?=0;a=b;//?不能给Int赋值?对Intb=a;不可变类型/变量类型val声明一个不可变变量,不能重新赋值;var声明一个可变变量,可以重新赋值。vara=0;valb=1;a=b;b=a;//?无法将字符串插值分配给val变量valPI=3.1415926vals1="PIis${PI}";//PI是3.1415926vals2="PI是${String.format("%.2f",PI)}";//PIis3.14字符串插值语法不支持格式化(这个不如C#方便)支持函数式编程,Everythingisanexpressionwithoutaconditional(ternary)operator,因为if分支可以做到(随便写一点更多的话)funfixInt(value:Int?):Int{valn=value?:0;如果(n>=0)n则返回-n;//C#的int?可以参与计算,这是不一样的}when甚至try...catch都可以作为表达式fundevide(m:Int,n:Int){returntry{m/n}catch(e:ArithmeticException){0}}函数式编程支持:上面的fixIntwith,also,let,run,apply可以改写为let,注意?.let表示在let块中是一个非空类型funfixInt(value:Int?):Int{returnvalue?.let{if(it>=0)itelse-it}?:0}with(obj)块将引用这个obj对象,而this.如果没有冲突可以省略。with("HelloWorld"){println("`${this}`有${length}个字符")}//`HelloWorld`有11个字符,前两个导入它(或自定义变量),最后两个导入th是;alsoandapplyreturntothecaller,othersreturnthelastrowofcalculatedresultproperty(gotogetter/setter)扩展方法funString.blabla(){...}感觉比C#更合理,但是不能这样调用astaticfunction(虽然本质是staticfunction)Lambda无差别(想想Consumer,Runable等。签名相同但接口不同的Lambda不能互换)objectdeconstructionoperatorfuncomponentN()operator方法,用于解构。N从1开始,依次递增。whenbranch(Java12hasswitchexpression)when(view){isTextView->toast(view.text)isRecyclerView->toast("Itemcount=${view.adapter.itemCount}")isSearchView->toast("Currentquery:${view.query}")else->toast("Viewtypenotsupported")}工具(案例演示)返回一个int[]字符串数组的工具函数,比如padStart,orEmpty等类似的流,但更简洁,forEachIndexed快速创建List和Map,将一个大的byte[]转成16进制输出(text)其他协程和await,格式为每行16字节