Kotlin:@JvmOverloads注解

在Kotlin中,@JvmOverloads注解的作用是:在有默认参数值的方法中使用@JvmOverloads注解,则kotlin会暴露多个重载方法。

例子:

@JvmOverloads
fun test( name: String,  age : Int, sex : Int = 1, num : Int = 10) {
    Log.i("TAG", "test: ab = " + name)
}

//调用
test("a", 2)
test("a", 2, 2)
test("a", 2, num = 2)
test("a", 2, 2, 10)

我们将其转为java代码看看

@JvmOverloads
   public final void test(@NotNull String name, int age, int sex, int num) {
      Intrinsics.checkNotNullParameter(name, "name");
      Log.i("TAG", "test: ab = " + name);
   }

   // $FF: synthetic method
   public static void test$default(MainActivity var0, String var1, int var2, int var3, int var4, int var5, Object var6) {
      if ((var5 & 4) != 0) {
         var3 = 1;
      }

      if ((var5 & 8) != 0) {
         var4 = 10;
      }

      var0.test(var1, var2, var3, var4);
   }

   @JvmOverloads
   public final void test(@NotNull String name, int age, int sex) {
      test$default(this, name, age, sex, 0, 8, (Object)null);
   }

   @JvmOverloads
   public final void test(@NotNull String name, int age) {
      test$default(this, name, age, 0, 0, 12, (Object)null);
   }

//调用
test$default(this, "a", 2, 0, 0, 12, (Object)null);
test$default(this, "a", 2, 2, 0, 8, (Object)null);
test$default(this, "a", 2, 0, 2, 4, (Object)null);
this.test("a", 2, 2, 10);

可以看到重载了同名不同参数的方法,但是可以看到,重载的方法里面多了一些数字参数4、8、12。

这里是一个非常巧的操作,以这个函数为例,有4个参数,也就是4个位置,每个位置分别有一个mask值,为2的n-1次方(n就是位置的顺序),所以这四个位置代表的mask值分别为1,2,4,8。如果当前位置没有参数调用,那么就将其mask值累加,最后得到一个结果。

最后将该结果分别与对应的mask值进行与运算,就可以得知该位置有没有参数调用,如果没有,就对该参数赋予默认值,这就实现了参数默认值的效果。

相关推荐

  1. SpringBoot注解

    2024-03-29 05:16:02       42 阅读
  2. 【Scala 】注解

    2024-03-29 05:16:02       33 阅读
  3. @Conditional注解

    2024-03-29 05:16:02       25 阅读
  4. Spring--注解

    2024-03-29 05:16:02       15 阅读
  5. SpringBoot注解

    2024-03-29 05:16:02       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 05:16:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 05:16:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 05:16:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 05:16:02       18 阅读

热门阅读

  1. 3.28 c++

    2024-03-29 05:16:02       15 阅读
  2. NatCat使用说明

    2024-03-29 05:16:02       16 阅读
  3. Yarn的安装和使用

    2024-03-29 05:16:02       17 阅读
  4. VUE3——setup介绍

    2024-03-29 05:16:02       16 阅读
  5. 【Kotlin】List、Set、Map简介

    2024-03-29 05:16:02       18 阅读
  6. js的apply、call、bind

    2024-03-29 05:16:02       16 阅读
  7. python解压RAR文件

    2024-03-29 05:16:02       15 阅读
  8. 大前端-postcss安装使用指南

    2024-03-29 05:16:02       18 阅读
  9. ubuntu18.04找不到网络适配器,无法连接网络

    2024-03-29 05:16:02       17 阅读
  10. CUDA从入门到放弃(七):流( Streams)

    2024-03-29 05:16:02       16 阅读