Kotlin注解之JvmField

我们首先定义一个Koltin的Person类

class Person(var name: String, var age: Int)

转换成Java如下:

public final class Person {
   @NotNull
   private String name;
   private int age;

   @NotNull
   public final String getName() {
      return this.name;
   }

   public final void setName(@NotNull String var1) {
      Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
      this.name = var1;
   }

   public final int getAge() {
      return this.age;
   }

   public final void setAge(int var1) {
      this.age = var1;
   }

   public Person(@NotNull String name, int age) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      super();
      this.name = name;
      this.age = age;
   }
}

在Java中使用这个Person类:

Person p1 = new Person("haha", 18);
p1.setName("XiXi");
p1.setAge(16);

而在Kotlin中可以直接使用:

扫描二维码关注公众号,回复: 11949379 查看本文章
val person = Person("haha", 18)
person.name = "xixi"
person.age = 16

如果希望在Java中 的使用方式与在Kotlin中相同,应该如何处理呢?

在Kotlin代码中加上@JvmField

class Person(@JvmField var name: String, var age: Int)

转换成对应的Java文件为:

public final class Person {
   @JvmField
   @NotNull
   public String name;
   private int age;

   public final int getAge() {
      return this.age;
   }

   public final void setAge(int var1) {
      this.age = var1;
   }

   public Person(@NotNull String name, int age) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      super();
      this.name = name;
      this.age = age;
   }
}

在Java文件中就可以以相同的方式调用:

Person p1 = new Person("haha", 18);
p1.name = "xixi";

猜你喜欢

转载自blog.csdn.net/zhangying1994/article/details/109137106