天天看點

Kotlin伴生對象與靜态成員

一、解釋

每個類可以對應一個伴生對象

伴生對象的成員全局獨一份

伴生對象的成員類似于Java的靜态成員

二、Java中

調用kotlin類的方法需要加上

@JvmStatic

調用kotlin類的成員變量需要加上

@JvmField

三、形如java.lang包中math類

它所有的方法全部都是靜态的,在使用的時候,直接就可以math.xxx(方法)

四、形如Integer類中的方法,在Java中這樣使用

Integer a = Integer.valueOf(3);           

五、在Kotlin中,形如這樣的可以直接調用

看一下代碼

Integer a = Integer.valueOf(3);           

六、看一下例子

先看一下kotlin中的類

package net.println.kotlin.chapter4

/**
 * @author:wangdong
 * @description:伴生對象和靜态成員
 */

fun main(args: Array<String>) {
    //val a = minOf(args[0].toInt(),args[1].toInt())
    //用一下下面的定義
    val latitude = Latitude.ofDouble(40.3)
    val latitude2 = Latitude.ofLatitude(latitude)
    println(Latitude.TAG)
}

/**定義一個緯度類*/
class Latitude private constructor(val value: Double){
    //類的伴生對象
    companion object {
        //定義一個靜态方法
        @JvmStatic
        fun ofDouble(double: Double): Latitude {
            return Latitude(double)
        }
        //定義一個靜态方法
        @JvmStatic
        fun ofLatitude(latitude: Latitude): Latitude {
            return Latitude(latitude.value)
        }

        //定義一個靜态變量
        @JvmField
        val TAG: String = "hello"
    }
}           

看一下Java中寫法

package net.println.kotlin.chapter4;

/**
 * @author:wangdong
 * @description:在java中調用Latitude方法
 */
public class StaticJava {

    Integer a = Integer.valueOf(3);

    public static void main(String[] args) {
        //需要調用一下companion,在調用方法
        Latitude latitude = Latitude.Companion.ofDouble(54.4);
        //可以在Latitude中方法上加一個注解@JvmStatic
        Latitude latitude2 = Latitude.ofDouble(54.87);
        System.out.println(Latitude.TAG);
    }

}           

結束