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);
      }
   }
   )
}
相关推荐
tobebetter95272 小时前
How to manage python versions on windows
开发语言·windows·python
Y***h1873 小时前
第二章 Spring中的Bean
java·后端·spring
9***P3343 小时前
PHP代码覆盖率
开发语言·php·代码覆盖率
8***29313 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger3 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz3 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
q***06293 小时前
Tomcat的升级
java·tomcat
多多*4 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
青云交4 小时前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度
d***81724 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端