最近经常收到一些“Kotlin怎么写”的问题。作为经验丰富的程序员,我们已经掌握了一种或多种语言,所以在学习Kotlin时,我们经常会问诸如“日语中‘再见’怎么说?”、“西班牙语中‘你好’怎么说?”等问题,所以我决定列出一些常用的语法比较。如果您熟悉Java,那么开始使用Kotlin将会有所帮助。变得很容易。本文主要是为需要快速上手Kotlin的Java程序员编写的。此时他们关注的重点是如何在Kotlin中写出一些类Java的写法,所以这篇文章基本不涉及Kotlin的高级特性。1.如何定义变量Java定义变量:Stringstring="Hello";基本上等同于Kotlin定义变量:varstring:String="Hello"Java定义final变量:finalStringstring="Hello";注意前面是一个编译时常量,在Kotlin中应该这样写:constvalstring:String="Hello"也是一个final变量,而Java是这样写的:finalStringstring=getString();注意这不是编译时常量,Kotlin是这样写的:valstring:String=getString()另外Kotlin有类型推导的特性,所以上面的变量定义基本可以省略String类型。2.如何定义函数Java中如何定义函数,即方法,需要在类中定义:publicbooleantestString(Stringname){...}等价的Kotlin写法:funtestString(name:String):Boolean{...}注意,返回值的位置是放在参数之后的。3.如何定义静态变量和方法Java中的静态方法或变量只需要加一个static:publicclassSingleton{privatestaticSingletoninstance=...;publicstaticSingletongetInstance(){...returninstance;}}在Kotlin中直译为:classKotlinSingleton{companionobject{privatevalkotlinSingleton=KotlinSingleton()@JvmStaticfungetInstance()=kotlinSingleton}}注意getInstance的写法。JvmStatic注释会将getInstance方法编译成与Java静态方法相同的签名。如果不加这个注解,这个方法就不能像Java静态方法一样在Java中被调用。另外,对于静态方法和变量场景,建议在Kotlin中使用包级函数。4.如何定义数组Java中的数组非常简单,当然也有些抽象。毕竟,它们是编译期间生成的类:String[]names=newString[]{"Kyo","Ryu","Iory"};String[]emptyStrings=newString[10];Kotlin的数组其实更现实也更容易理解:valnames:Array=arrayOf("Kyo","Ryu","Iory")valemptyStrings:Array=arrayOfNulls(10)注意ArrayT是数组元素的类型。还有,字符串?表示可为null的String类型。数组的使用基本相同。需要注意的是,为了避免装箱和拆箱的开销,Kotlin为包括Int、Short、Byte、Long、Float、Double、Char等基本类型提供了自定义的数组类型,写成XArray,比如Int的自定义数组为IntArray。如果我们要定义一个整型数组,写法如下:valints=intArrayOf(1,3,5)5.变长参数的写法Java变长参数的写法如下:voidhello(String...names){...}Kotlin的变长参数写法如下:funhello(varargnames:String){}6.三元运算符怎么写Java可以写一个三元运算符:intcode=isSuccessfully200:400;很多人抱怨Kotlin为什么没有这样的运算符。..据说在Kotlin中:使用场景比Java复杂很多,所以如果加上这个三元运算符,会给解析器带来更多的麻烦,Scala也是类似的情况。那么在这种情况下,我们在Kotlin中应该怎么写呢?intcode=if(isSuccessfully)200else400注意ifelse这样的语句也是表达式,这点和Java不同。7.main函数怎么写Java中main函数只有一种写法:classMain{publicstaticvoidmain(String...args){...}}注意参数可以是变长参数也可以是数组,两者都很好。对应Kotlin,main函数的写法如下:主要功能:funmain(args:Array){...}8。如何实例化Java、C++等语言,在构造对象时经常会用到关键字new,例如:Datedate=newDate();Kotlin构造对象时,不需要new关键字,所以上面的写法相当于:valdate=Date()9.Getter和Setter方法怎么写Java的Getter和Setter是约定,不是语法特性,所以比较自由定义:publicclassGetterAndSetter{privateintx=0;publicintgetX(){returnx;}publicvoidsetX(intx){this.x=x;}}Kotlin有属性:classKotlinGetterAndSetter{varx:Int=0set(value){field=value}get()=field}注意我们为x显式定义了getter和setter,而field是x后面真正的变量,所以setter实际上是给field赋值,getter返回的是field。如果你想控制对x的访问,那么你可以通过自定义getter和setter来实现:classKotlinGetterAndSetter{varx:Int=0set(value){valdate=Calendar.getInstance().apply{set(2017,2,18)}if(System.currentTimeMillis()clazz=Hello.class;Hellohello=newHello();Class>clazz2=hello.getClass();前面我们展示了获取类的方式有两种,一种是直接使用类名,另一种是通过类实例。刚开始接触Kotlin的时候,对于获取JavaClass的方法一头雾水。classHellovalclazz=Hello::class.javavalhello=Hello()valclazz2=hello.javaClass具有相同效果的Kotlin代码看起来真的很奇怪。其实Hello::class获取的是Kotlin的KClass,也就是Kotlin的类型。如果你想得到JavaClass实例,你需要前面的方法。