Kotlin Class

打印 上一主题 下一主题

主题 790|帖子 790|积分 2370

平凡 Class

kotlin
  1. class TestClz {
  2.     val name: String = "hsw"
  3.     val age: Int = 18
  4. }
复制代码
java
  1. public final class TestClz {
  2.    @NotNull
  3.    private final String name = "hsw";
  4.    private final int age = 18;
  5.    @NotNull
  6.    public final String getName() {
  7.       return this.name;
  8.    }
  9.    public final int getAge() {
  10.       return this.age;
  11.    }
  12. }
复制代码
转换为Java后的厘革

  • 类被 final 修饰,不可继承;加上open 可以去掉 final
  • var修饰的属性添加了get set 方法 , val 只有·get 方法
data class

kotlin
  1. data class TestClz(val name: String, var age: Int)
复制代码
java
  1. public final class TestClz {
  2.    @NotNull
  3.    private final String name;
  4.    private int age;
  5.    @NotNull
  6.    public final String getName() {
  7.       return this.name;
  8.    }
  9.    public final int getAge() {
  10.       return this.age;
  11.    }
  12.    public final void setAge(int var1) {
  13.       this.age = var1;
  14.    }
  15.    public TestClz(@NotNull String name, int age) {
  16.       Intrinsics.checkNotNullParameter(name, "name");
  17.       super();
  18.       this.name = name;
  19.       this.age = age;
  20.    }
  21.    @NotNull
  22.    public final String component1() {
  23.       return this.name;
  24.    }
  25.    public final int component2() {
  26.       return this.age;
  27.    }
  28.    @NotNull
  29.    public final TestClz copy(@NotNull String name, int age) {
  30.       Intrinsics.checkNotNullParameter(name, "name");
  31.       return new TestClz(name, age);
  32.    }
  33.    // $FF: synthetic method
  34.    public static TestClz copy$default(TestClz var0, String var1, int var2, int var3, Object var4) {
  35.       if ((var3 & 1) != 0) {
  36.          var1 = var0.name;
  37.       }
  38.       if ((var3 & 2) != 0) {
  39.          var2 = var0.age;
  40.       }
  41.       return var0.copy(var1, var2);
  42.    }
  43.    @NotNull
  44.    public String toString() {
  45.       return "TestClz(name=" + this.name + ", age=" + this.age + ")";
  46.    }
  47.    public int hashCode() {
  48.       String var10000 = this.name;
  49.       return (var10000 != null ? var10000.hashCode() : 0) * 31 + Integer.hashCode(this.age);
  50.    }
  51.    public boolean equals(@Nullable Object var1) {
  52.       if (this != var1) {
  53.          if (var1 instanceof TestClz) {
  54.             TestClz var2 = (TestClz)var1;
  55.             if (Intrinsics.areEqual(this.name, var2.name) && this.age == var2.age) {
  56.                return true;
  57.             }
  58.          }
  59.          return false;
  60.       } else {
  61.          return true;
  62.       }
  63.    }
  64. }
复制代码
转换为Java后的厘革

  • 类被 final 修饰,不可继承;加上open 可以去掉 final
  • var修饰的属性添加了get set 方法 , val 只有·get 方法
  • 实现了 toString equal hashCode 方法
  • 类似于java bean
object

  1. object TestClz {
  2.     val name: String = "hsw"
  3.     var age: Int = 18
  4.     fun getInfo(): String {
  5.         return "${name}-${age}"
  6.     }
  7. }
复制代码
  1. public final class TestClz {
  2.    @NotNull
  3.    private static final String name;
  4.    private static int age;
  5.    @NotNull
  6.    public static final TestClz INSTANCE;
  7.    @NotNull
  8.    public final String getName() {
  9.       return name;
  10.    }
  11.    public final int getAge() {
  12.       return age;
  13.    }
  14.    public final void setAge(int var1) {
  15.       age = var1;
  16.    }
  17.    @NotNull
  18.    public final String getInfo() {
  19.       return name + '-' + age;
  20.    }
  21.    private TestClz() {
  22.    }
  23.    static {
  24.       TestClz var0 = new TestClz();
  25.       INSTANCE = var0;
  26.       name = "hsw";
  27.       age = 18;
  28.    }
  29. }
复制代码
转换为Java后的厘革

  • 类被 final 修饰,不可继承;加上open 可以去掉 final
  • var修饰的属性添加了get set 方法 , val 只有·get 方法
  • 饿汉式实现了单例
  • java 不可直接调用get set 需要通过INSTANCE , 属性和方法 加上@JvmStatic 可以转换为静态属性/方法 直接调用
内部类

  1. class TestClz {
  2.     val name: String = "hsw"
  3.     companion object {
  4.         val grade = 12L
  5.         fun getInfo() {
  6.             println("name-$name")
  7.         }
  8.     }
  9.     object CCS {
  10.         val grade = 12L
  11.         fun getSome() {
  12.             println("name-$name")
  13.         }
  14.     }
  15.     class Info {
  16.         val grade = 12L
  17.         fun getSome() {
  18.             println("name-$name")
  19.         }
  20.     }
  21.     inner class WC {
  22.         val grade = 12L
  23.         fun getSome() {
  24.             println("name-${name}")
  25.         }
  26.     }
  27. }
复制代码
  1. public final class TestClz {
  2.    @NotNull
  3.    private final String name = "hsw";
  4.    private static final long grade = 12L;
  5.    @NotNull
  6.    public static final Companion Companion = new Companion((DefaultConstructorMarker)null);
  7.    @NotNull
  8.    public final String getName() {
  9.       return this.name;
  10.    }
  11.         // companion 伴生对象
  12.         // kotlin 可直接访问属性和方法
  13.         // java 需要通过 Companion 对象访问
  14.          public static final class Companion {
  15.       public final long getGrade() {
  16.          return TestClz.grade;
  17.       }
  18.       public final void getInfo() {
  19.          
  20.       }
  21.       private Companion() {
  22.       }
  23.       // $FF: synthetic method
  24.       public Companion(DefaultConstructorMarker $constructor_marker) {
  25.          this();
  26.       }
  27.    }
  28.    // object 相当于通过单例实现静态内部类对象
  29.    public static final class CCS {
  30.       private static final long grade;
  31.       @NotNull
  32.       public static final CCS INSTANCE;
  33.       public final long getGrade() {
  34.          return grade;
  35.       }
  36.       public final void getSome() {
  37.    
  38.       }
  39.       private CCS() {
  40.       }
  41.       static {
  42.          CCS var0 = new CCS();
  43.          INSTANCE = var0;
  44.          grade = 12L;
  45.       }
  46.    }
  47.         // 普通 class 相当于静态内部类,需要实例化调用方法
  48.    public static final class Info {
  49.       private final long grade = 12L;
  50.       public final long getGrade() {
  51.          return this.grade;
  52.       }
  53.       public final void getSome() {
  54.          
  55.       }
  56.    }
  57.         // inner class 内部类,可以直接使用外部类的属性和方法
  58.    public final class WC {
  59.       private final long grade = 12L;
  60.       public final long getGrade() {
  61.          return this.grade;
  62.       }
  63.       public final void getSome() {
  64.          String var1 = "name-" + TestClz.this.getName();
  65.          System.out.println(var1);
  66.       }
  67.    }
  68.    )
  69. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表