Kotlin系列之1-Kotlin中的JvmField JvmStatic

官方的说明如下

伴生函数:

在 “companion object” 中的公共函数必须用使用 @JvmStatic 注解才能暴露为静态方法。

如果没有这个注解,这些函数仅可用作静态 Companion 字段上的实例方法。

伴生常量:

在 companion object 中的公共、非 const 的属性 实际上为常量 必须用 @JvmField 注解才能暴露为静态字段。

如果没有这个注解,这些属性只能作为静态 Companion 字段中奇怪命名的 ‘getters’ 实例。而只使用 @JvmStatic 而不是 @JvmField 的话,会将奇怪命名的 ‘getters’ 移到类的静态方法中,但仍然是不正确的。

下面我们开看一下java中的静态变量与静态方法:

public class StaticClass{

  private in paramFirst=0;
  public static final String  address="测试的地址"
  public static void method(){
    Log.d("clark","this is test log");
  }
}

我们把它转化成kotlin代码会得到结果如下

class StaticClass{
  private var paramsFirst=0;
  companion object{
    val address="测试的地址"
    fun method(){
      Log.d("clark","this is test log");
    }
  }
}

静态变量个静态方法都会放到kotlin类的伴生体中,成为伴生常量和伴生方法。这时候如果要在java中调用这些,会是如下的方式:

StaticClass.Companion.getParamFirst();
StaticClass.Companion.method();

 这显然是于我们平时的调用习惯不一样的,为了保持使用习惯的一致,则需要分别加上JvmField,JvmStatic注解。这样才能让它们暴露成为静态变量与静态方法。

class StaticClass{
  private var paramsFirst=0;
  companion object{
    @JvmField val address="测试的地址"
    @JvmStatic fun method(){
      Log.d("clark","this is test log");
    }
  }
}

 这样调用的话就是

StaticClass.paramFirst;
StaticClass.method()

 还有几个注意点,标注出来,大家使用的时候注意一下。

  1. @JvmField消除了变量的getter与setter方法
  2. @JvmField修饰的变量不能是private属性的
  3. @JvmStatic只能在object类或者伴生对象companion object中使用,而@JvmField没有这些限制
  4. @JvmStatic一般用于修饰方法,使方法变成真正的静态方法;如果修饰变量不会消除变量的getter与setter方法,但会使getter与setter方法和变量都变成静态

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值