Kotlin学习第1篇——data class

Data classes 官方介绍

在学习之前带着问题往往能够收获颇丰

文章目录

  • [1 输出结果是什么?](#1 输出结果是什么?)
  • [2 输出结果是什么?](#2 输出结果是什么?)
  • [3 输出的结果是什么?](#3 输出的结果是什么?)
  • [4 下面哪些data class 可以编译通过?](#4 下面哪些data class 可以编译通过?)

1 输出结果是什么?

kotlin 复制代码
data class Student(var name: String = ""){
   var age:Int = 0
}

val a = Student(name = "1")
val b = Student(name = "1")
Log.d("GerryLiang", "a equals b ?${a.equals(b)}")
Log.d("GerryLiang", "a == b ?${a == b}")
Log.d("GerryLiang", "a === b ?${a === b}")

2 输出结果是什么?

kotlin 复制代码
data class Student(var name: String = ""){
   var age:Int = 0
}

val a = Student(name = "1").apply {
    age = 10
}
val b = Student(name = "1").apply {
    age = 20
}
Log.d("GerryLiang", "a equals b ?${a.equals(b)}")
Log.d("GerryLiang", "a == b ?${a == b}")
Log.d("GerryLiang", "a === b ?${a === b}")

3 输出的结果是什么?

kotlin 复制代码
data class Student(var name: String) {
    override fun toString(): String {
        return "Gerry toString"
    }
}

 val a = Student(name = "1")
 Log.d("GerryLiang", "$a")

4 下面哪些data class 可以编译通过?

kotlin 复制代码
data class Student()
abstract data class Student2(var name: String = "")
open data class Student3(var name: String = "", var age: Int = 0)
inner data class Student4(var name: String = "", var age: Int = 0)
sealed data class Student5(var name: String = "", var age: Int = 0)

下面开始公布答案:

  1. true true false (没有笔误,可以自测下)
  2. true true false (没有笔误,可以自测下)
  3. Gerry toString
  4. 都不可以

如何学习? 查看反编译后的Java代码即可!

如下所示一个简单的 data class

kotlin 复制代码
data class DataBean(var title: String = "", val subTitle: String = "")

我们来看看反编译后的Java代码长什么样子

java 复制代码
public final class DataBean {
   // 每个属性 内部生成了一系列的 get 和 set 方法
   @NotNull
   private String title;
   @NotNull
   private final String subTitle;

   @NotNull
   public final String getTitle() {
      return this.title;
   }

   public final void setTitle(@NotNull String var1) {
      Intrinsics.checkNotNullParameter(var1, "<set-?>");
      this.title = var1;
   }

   @NotNull
   public final String getSubTitle() {
      return this.subTitle;
   }

   public DataBean(@NotNull String title, @NotNull String subTitle) {
      Intrinsics.checkNotNullParameter(title, "title");
      Intrinsics.checkNotNullParameter(subTitle, "subTitle");
      super();
      this.title = title;
      this.subTitle = subTitle;
   }

   // $FF: synthetic method
   public DataBean(String var1, String var2, int var3, DefaultConstructorMarker var4) {
      if ((var3 & 1) != 0) {
         var1 = "";
      }

      if ((var3 & 2) != 0) {
         var2 = "";
      }

      this(var1, var2);
   }

   public DataBean() {
      this((String)null, (String)null, 3, (DefaultConstructorMarker)null);
   }

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

   @NotNull
   public final String component2() {
      return this.subTitle;
   }

   @NotNull
   public final DataBean copy(@NotNull String title, @NotNull String subTitle) {
      Intrinsics.checkNotNullParameter(title, "title");
      Intrinsics.checkNotNullParameter(subTitle, "subTitle");
      return new DataBean(title, subTitle);
   }

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

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

      return var0.copy(var1, var2);
   }

// 以后不用自己拼接字符串打印参数了
   @NotNull
   public String toString() {
      return "DataBean(title=" + this.title + ", subTitle=" + this.subTitle + ")";
   }

// 重写了hashCode 
   public int hashCode() {
      String var10000 = this.title;
      int var1 = (var10000 != null ? var10000.hashCode() : 0) * 31;
      String var10001 = this.subTitle;
      return var1 + (var10001 != null ? var10001.hashCode() : 0);
   }
   
// 重写了equals方法
   public boolean equals(@Nullable Object var1) {
      if (this != var1) {
         if (var1 instanceof DataBean) {
            DataBean var2 = (DataBean)var1;
            if (Intrinsics.areEqual(this.title, var2.title) && Intrinsics.areEqual(this.subTitle, var2.subTitle)) {
               return true;
            }
         }

         return false;
      } else {
         return true;
      }
   }
}
相关推荐
Java后端的Ai之路10 分钟前
RAG 还是 Agent 自主检索?Claude Code 删掉向量库之后,我把选型讲透了
开发语言·人工智能·prompt·agent·rag
starzy199021 分钟前
深入理解Scala高阶函数:函数式编程核心
开发语言·scala
czq_26867194876 小时前
Python打卡第46天
开发语言·python
传奇开心果编程6 小时前
【Jetpack Compose娓娓道来】第36课:焦点管理与键盘输入——让遥控器、键盘和输入法都“找得到北”
android·kotlin·移动开发·交互·android jetpack·ui框架·声明式ui
hai_android7 小时前
AudioTrack 深度解析:从原理到实战
android·java·kotlin
wangqiaowq7 小时前
Ontology 学习
学习
红尘伴蝶舞7 小时前
从秒开优化到连环崩溃:深入剖析 ViewPager2 在常驻 DialogFragment 中的复用陷阱与自愈方案
android·kotlin
Evand J9 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
choumou_M9 小时前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
BaiPeter10 小时前
ZPL文件预览
开发语言·c++