Kotlin Class

普通 Class

kotlin

kotlin 复制代码
class TestClz {
    val name: String = "hsw"
    val age: Int = 18
}

java

java 复制代码
public final class TestClz {
   @NotNull
   private final String name = "hsw";
   private final int age = 18;

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

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

转换为Java后的变化

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

data class

kotlin

kotlin 复制代码
data class TestClz(val name: String, var age: Int)

java

java 复制代码
public final class TestClz {
   @NotNull
   private final String name;
   private int age;

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

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

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

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

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

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

   @NotNull
   public final TestClz copy(@NotNull String name, int age) {
      Intrinsics.checkNotNullParameter(name, "name");
      return new TestClz(name, age);
   }

   // $FF: synthetic method
   public static TestClz copy$default(TestClz var0, String var1, int var2, int var3, Object var4) {
      if ((var3 & 1) != 0) {
         var1 = var0.name;
      }

      if ((var3 & 2) != 0) {
         var2 = var0.age;
      }

      return var0.copy(var1, var2);
   }

   @NotNull
   public String toString() {
      return "TestClz(name=" + this.name + ", age=" + this.age + ")";
   }

   public int hashCode() {
      String var10000 = this.name;
      return (var10000 != null ? var10000.hashCode() : 0) * 31 + Integer.hashCode(this.age);
   }

   public boolean equals(@Nullable Object var1) {
      if (this != var1) {
         if (var1 instanceof TestClz) {
            TestClz var2 = (TestClz)var1;
            if (Intrinsics.areEqual(this.name, var2.name) && this.age == var2.age) {
               return true;
            }
         }

         return false;
      } else {
         return true;
      }
   }
}

转换为Java后的变化

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

object

kotlin 复制代码
object TestClz {
    val name: String = "hsw"
    var age: Int = 18
    fun getInfo(): String {
        return "${name}-${age}"
    }
}
java 复制代码
public final class TestClz {
   @NotNull
   private static final String name;
   private static int age;
   @NotNull
   public static final TestClz INSTANCE;

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

   public final int getAge() {
      return age;
   }

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

   @NotNull
   public final String getInfo() {
      return name + '-' + age;
   }

   private TestClz() {
   }

   static {
      TestClz var0 = new TestClz();
      INSTANCE = var0;
      name = "hsw";
      age = 18;
   }
}

转换为Java后的变化

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

内部类

kotlin 复制代码
class TestClz {
    val name: String = "hsw"

    companion object {

        val grade = 12L

        fun getInfo() {
            println("name-$name")
        }
    }

    object CCS {
        val grade = 12L

        fun getSome() {
            println("name-$name")
        }
    }

    class Info {
        val grade = 12L

        fun getSome() {
            println("name-$name")
        }
    }

    inner class WC {
        val grade = 12L

        fun getSome() {
            println("name-${name}")
        }
    }
}
java 复制代码
public final class TestClz {
   @NotNull
   private final String name = "hsw";
   private static final long grade = 12L;
   @NotNull
   public static final Companion Companion = new Companion((DefaultConstructorMarker)null);

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

	// companion 伴生对象
	// kotlin 可直接访问属性和方法
	// java 需要通过 Companion 对象访问
	 public static final class Companion {
      public final long getGrade() {
         return TestClz.grade;
      }

      public final void getInfo() {
         
      }

      private Companion() {
      }

      // $FF: synthetic method
      public Companion(DefaultConstructorMarker $constructor_marker) {
         this();
      }
   }
   // object 相当于通过单例实现静态内部类对象
   public static final class CCS {
      private static final long grade;
      @NotNull
      public static final CCS INSTANCE;

      public final long getGrade() {
         return grade;
      }

      public final void getSome() {
    
      }

      private CCS() {
      }

      static {
         CCS var0 = new CCS();
         INSTANCE = var0;
         grade = 12L;
      }
   }

	// 普通 class 相当于静态内部类,需要实例化调用方法
   public static final class Info {
      private final long grade = 12L;

      public final long getGrade() {
         return this.grade;
      }

      public final void getSome() {
         
      }
   }

	// inner class 内部类,可以直接使用外部类的属性和方法
   public final class WC {
      private final long grade = 12L;

      public final long getGrade() {
         return this.grade;
      }

      public final void getSome() {
         String var1 = "name-" + TestClz.this.getName();
         System.out.println(var1);
      }
   }
   )
}
相关推荐
xiaobai12 32 分钟前
二叉树的遍历【C++】
开发语言·c++·算法
DieSnowK9 分钟前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
Freak嵌入式10 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
java·开发语言·数据结构·python·接口·抽象基类
冷凝女子12 分钟前
【QT】基于HTTP协议的网络应用程序
开发语言·qt·http
知识分享小能手15 分钟前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
前端小马20 分钟前
解决IDEA出现:java: 程序包javax.servlet不存在的问题
java·servlet·intellij-idea
鸽芷咕24 分钟前
【Python报错已解决】libpng warning: iccp: known incorrect sRGB profile
开发语言·python·机器学习·bug
白总Server30 分钟前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
XyLin.33 分钟前
Msf之Python分离免杀
开发语言·python·网络安全·系统安全
声学黑洞仿真工作室35 分钟前
Matlab Delany-Bazley和Miki模型预测多孔材料吸声性能
开发语言·人工智能·算法·matlab·微信公众平台