【Kotlin】和【Java】使用对比小结

本文对比了Kotlin和Java在变量访问权限、类型系统、函数返回值、数组、基本数据类型、静态方法调用、构造函数以及集合等方面的差异。Kotlin中变量默认为私有,使用get/set,public需加@JvmField。Java的void对应Kotlin的Unit。推荐使用Kotlin的IntArray等避免装箱。Kotlin无static,可通过object或companion object实现类似功能。Kotlin的List默认不可变,常用ArrayList或MutableList。
  1. Kotlin中的private和public
    Kotlin中创建的默认变量都是私有类型,会隐式生成对应的get/set函数。调用的时候虽然是直接通过变量名调用,实际上调用的是变量对应的get/set方法。要是变量变为public 需要使用@JvmFiled注解。
    私有变量:

    	class User{
    		    var name:String? = null      //相当于private
    		        //如果对get set只是返回变量值,则可以省略
    		        set(value){
    		            filed = value //field为中间变量
    		        }
    		        get(){
    		            return field
    		        }
    		}
    

    公有变量:

    class User{
        @JvmField
        var name:String? = null      //相当于public修饰
    }
    
  2. Kotlin中的类型系统
    Java中所有类的基类是Object,Kotlin中是Any。

    class Java extents Object{
    }
    
    class Kotlin : Any() {
    }
    

    Java中函数无返回值使用void,Kotlin中使用Unit。

    public void test(){ }
    
    public fun test(): Unit{ } //Unit可以省略
    
  3. 数组

    private String[] array = new String[]{"a","a","a"}; //java
    
    private var array = arrayOf("a","a","a”) //kotlin
    

    使用基本类型数组时,arrayOf会将数据进行装箱拆箱操作,会增加内存开销 。推荐使用IntArray,FloatArray等。。

    var intArray == intArrayOf(1,2,3,4) //InArray
    var floatArray == floatArrayOf(1,2,3,4) //FloatArray
    
  4. 基本数据类型
    基本数据类型的特点:不可为null,有默认值。如Java中int, double, float等,在Kotlin中对应的是Int, Double, Float。看起来有点像Java中基本数据类型的封装类,但是并不是。封装类是可空的,所以Java中基本数据类型的封装类(Int, Double, Float等)对应的Kotlin类为(Int?, Double?, Float?)。

  5. 静态方法
    Java中Utils中通常都是静态方法,为了方便调用。Kotlin中取消了static关键字,声明静态方法有2种方式:
    1.直接在文件中创建方法。
    Kotlin中的方法是可以直接写在文件中的,这样调用的时候只需import一下文件名即可调用。
    2.使用object创建
    object修饰的类中的方法可以通过ClassName.methordName( )直接调用。虽然用法一样但是并不是创建了静态方法,而是创建了一个单例对象。 object在kotlin中的作用就是创建单例对象。所以在Java中调用的时候要通过Instance实力调用。

     object Utils {
         fun getLength(content:String) : Int{
             return content.length 
         }
     }
    

    调用

    	Utils.getLength("asdasdas") //kotlin
    
    Utils.INSTANCE.getLength(" sadads ")//java 
    

    3.使用companion object创建, 并用使用JvmStatic注解

    class MainActivity : BaseActivity(){
       companion object {
            const val VERSION_CODE = 10 //静态常量用const修饰,在编译期赋值
    
            @JvmStatic
            fun getLength():Int { //… } 
        }
    }
    

    调用:

    MainActivity.getLength("asdasdas") //kotlin
    MainActivity.getLength(" sadads ")//java 
    
  6. 构造函数
    Kotlin中构造函数使用constructor关键字声明:

    class Apple:Fruit{
        constructor():this("") {} 
        constructor(name:String):super(name) {} //调用父类的构造方法
    
    }
    
  7. 集合
    Kotlin中的List是不支持修改的,通常使用ArrayList或者MutableList。同理Map也是不支持修改的,通常使用HashMap

    var list: MutableList = ArrayList()
    var arrayList1 = mutableListOf(1,2,3)
    var arrayList2 = arrayListOf(1,2,3)
    var map = hashMapOf<>()
    var map2 = mutableMapOf()
    
  8. internal修饰符
    Kotlin中的对象和方法默认是public的,如果使用internal 修饰,则只能在当前Moudle中调用。internal也可以用来修饰class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值