美文网首页
Kotlin 类4 - 伴生对象与静态成员

Kotlin 类4 - 伴生对象与静态成员

作者: ChenME | 来源:发表于2018-07-27 15:07 被阅读16次

    Kotlin 类4 - 伴生对象与静态成员


    • 在 Java 中,我们经常会把一些工具方法封装成一个类中的静态方法,这样就可以不用创建这个类的实例,直接用类名调用就可以了;
    • 但是在 Kotlin 中,我们一般不会这样用,我们会把这些工具方法定义成包级函数,直接拿函数名就可以调用了;
    • 例如我们要取两个数的最小值:
    val number1 = 100
    val number2 = 101
    val minNumber = minOf(number1, number2) // 100
    
    • 如果实在需要将函数放到类中,像 Java 一样通过类名调用,我们可以使用 伴生对象 companion object

    1. 伴生对象(静态函数)

    伴生对象的语法就是在一个类中,用 companion object{} 将函数包裹,这样就可以直接用类名去调用这些函数

    • 看下面的一个例子
    class LonLat private constructor(var longitude: Double, var latitude: Double) {
        companion object {
            fun instanceLonLat(longitude: Double, latitude: Double): LonLat {
                return LonLat(longitude, latitude)
            }
        }
    }
    

    这里创建了一个经纬度的类 LonLat,并将构造函数私有化了,这样我们就没有办法通过 new 实例化对象了,这是我们可以通过伴生对象,提供一个方法去返回该对象的实例

    val lonlat = LonLat.instanceLonLat(116.404269, 39.914935)
    
    • 上面是 Kotlin 的调用,在 Java 中如何调用呢?
    LonLat lonlat = LonLat.Companion.instanceLonLat(116.404269,39.914935);
    

    但是在 Java 中,这种写法未免有些太繁琐了,其实可以完全像 Java 静态方法一样使用。我们将 LonLat 稍作改动,在函数前加上 @JvmStatic 注解就可以了

    class LonLat private constructor(var longitude: Double, var latitude: Double) {
        companion object {
    
            @JvmStatic
            fun instanceLonLat(longitude: Double, latitude: Double): LonLat {
                return LonLat(longitude, latitude)
            }
        }
    }
    

    Java 中的调用

    LonLat lonlat = LonLat.instanceLonLat(116.404269, 39.914935);
    

    2. 静态成员

    class LonLat private constructor(var longitude: Double, var latitude: Double) {
        companion object {
            val TAG = "LonLat"
        }
    }
    
    println(LonLat.TAG) // LonLat
    
    • 如何在 Java 中调用呢?
    class LonLat private constructor(var longitude: Double, var latitude: Double) {
        companion object {
            @JvmField
            val TAG = "LonLat"
        }
    }
    
    System.out.println(LonLat.TAG); // LonLat
    

    相关文章

      网友评论

          本文标题:Kotlin 类4 - 伴生对象与静态成员

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