美文网首页kotlin
Kotlin中类似Java的静态方法

Kotlin中类似Java的静态方法

作者: Artfox丶艺狸 | 来源:发表于2017-08-20 09:40 被阅读0次

    刚开始自学Kotlin,因为和Java很像,基础部分还是比较容易理解的,但是Kotlin有自己的特性。
    在Kotlin里面我们发现没有静态变量和方法的说法,习惯了Java中使用静态方法还真有点不适应。
    开始在网上查找资料时大多会说使用伴生对象的方法来模拟静态。后来在官方文档中发现其实这种方式不是最好的实现方法。

    那首先看下在Java中静态方法和静态变量的使用方式:

    public class StaticDemo {
        
        public static int number = 1;
        
        public static int getId(){
            return 2;
        }
    }
    

    使用也很简单

        public static void main(String[] args){
    
            int number = StaticDemo.number;
            
            int id = StaticDemo.getId();
        }
    
    

    那Kotlin中的写法呢?
    我们使用伴生对象的方式看下:

    class KtStatic {
    
        var number1 = 10
    
        fun getId1():Int{
            return 11
        }
    
         //伴生对象
        companion object{
            var number2 = 20
    
            fun getId2():Int{
                return 21
            }
        }
    
    
    }
    
    

    在看下在Kotlin中使用和Java中使用有什么不同

    //Kotlin中
    fun main(args: Array<String>) {
    
    //    不可直接访问number1
    //    var number1 =KtStatic.number1
    
    //    同样不能直接访问getId1
    //    var id1 = KtStatic.getId1()
    
    //    使用下面方式看起来和在Java中使用的是一样的
        var number2 = KtStatic.number2
    
        var id2 = KtStatic.getId2()
    
    }
    

    Java中使用有了变化

        public static void main(String[] args) {
    
    //        不可访问,好理解
    //        int number1 = KtStatic.number1;
            
    //        也不可访问,
    //        int number2 = KtStatic.number2;
            
    //        正确访问方式,意外吧,呵呵
            int number = KtStatic.Companion.getNumber2();
            int id = KtStatic.Companion.getId2();
    
        }
    

    这种方法实际Companion相当于内部类
    那么下面来说另一种写法:

    package com.yiifox.demo
    
    var number = 1
    
    fun getId():Int{
        return 2
    }
    //方便知道我写的文件名
    class Kt2Static
    

    Kotlin中使用

    package com.yiifox.demo.test
    
    import com.yiifox.demo.KtStatic
    import com.yiifox.demo.getId
    import com.yiifox.demo.number
    
    fun main(args: Array<String>) {
        //    使用很简单,但是要注意导包
        var number2 = number
        
        var id = getId()
    }
    

    那么在Java中呢?

        public static void main(String[] args) {
    
    //        注意,原来写的类名是Kt2Static,使用时却多了个尾巴Kt
            int number = Kt2StaticKt.getNumber();
    
            int id = Kt2StaticKt.getId();
    
        }
    

    这种就是比较符合我们的使用了。

    关于在Kotlin中明明定义的是
    var number = 1
    Java中却使用的是getNumber();是因为Kotlin在转化为Java时会自动进行get、set包装。

    相关文章

      网友评论

        本文标题:Kotlin中类似Java的静态方法

        本文链接:https://www.haomeiwen.com/subject/zroxdxtx.html