美文网首页
Kotlin 数据类

Kotlin 数据类

作者: ZoranLee | 来源:发表于2021-11-20 23:01 被阅读0次

数据类就是只存储数据,不包含操作行为的类

data class LoginUser(val username: String, val password: String)


//生成的类如下
public final class LoginUser {
   @NotNull
   private final String username;
   @NotNull
   private final String password;

   @NotNull
   public final String getUsername() {
      return this.username;
   }

   @NotNull
   public final String getPassword() {
      return this.password;
   }

   public LoginUser(@NotNull String username, @NotNull String password) {//构造函数
      Intrinsics.checkParameterIsNotNull(username, "username");
      Intrinsics.checkParameterIsNotNull(password, "password");
      super();
      this.username = username;
      this.password = password;
   }

   @NotNull
   public final String component1() {//返回第一个值
      return this.username;
   }

   @NotNull
   public final String component2() {//返回第二个值
      return this.password;
   }

   @NotNull
   public final LoginUser copy(@NotNull String username, @NotNull String password) {
      Intrinsics.checkParameterIsNotNull(username, "username");
      Intrinsics.checkParameterIsNotNull(password, "password");
      return new LoginUser(username, password);
   }

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

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

      return var0.copy(var1, var2);
   }

   @NotNull
   public String toString() {
      return "LoginUser(username=" + this.username + ", password=" + this.password + ")";
   }

   public int hashCode() {
      String var10000 = this.username;
      int var1 = (var10000 != null ? var10000.hashCode() : 0) * 31;
      String var10001 = this.password;
      return var1 + (var10001 != null ? var10001.hashCode() : 0);
   }

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

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

数据类自动创建的函数
编译器会根据主构造函数中声明的属性,自动创建以下3个函数。

  • equals()/hashCode()函数toString()格式为"LoginUser(username="+this.username+",password="+this.password+")";
  • component1()和component2()函数返回对应下标的属性值,按声明顺序排列;
  • copy()函数:根据旧对象属性重新newLoginUser(username,password)一个对象出来。
    如果这些函数在类中已经被明确定义了,或者从超类中继承而来,编译器就不再生成。

数据类的语法限制

  • 主构造函数至少包含一个参数;
  • 参数必须标识为val或者var;
  • 不能为abstract、open、sealed或者inner;
  • 不能继承其他类(但可以实现接口)。

数据类可以在解构声明中使用:

    val loginUser = LoginUser("admin","admin")
    val (username,password) = loginUser//解构声明
    print("$username,$password")

Pair和Triple

二元组和三元组

data class Pair<out A, out B>(val first: A, val second: B) : Serializable {
    override fun toString(): String = "($first,$second)"

}

public infix fun <A,B> A.to(that:B) :Pair<A,B> = Pair(this,that)//中缀函数 to

相关文章

  • Kotlin 从0到1

    项目地址 Kotlin 基本语法、简单函数、基本数据类型 Kotlin 类0 - 类的简单使用 Kotlin 类1...

  • kotlin 数据类

    kotlin 数据类(data class) Kotlin 可以创建一个只包含数据的类,关键字为 data: da...

  • Kotlin学习之基础数据类型

    Kotlin学习之基础数据类型 @(Kotlin学习) Kotlin的基础数据类型包括数字类型、字符类型、字符串类...

  • Kotlin 数据类 以及copy方法

    数据类的创建是避免不了的,我们对比一下原有java和kotlin的数据类的区别 java Kotlin data ...

  • Kotlin基本语法之(六) 数据类data与单例类object

    数据类data data类是Kotlin中专门用来描述数据的类,数据类通常指的就是实体类(bean/entity)...

  • Kotlin for android学习四:数据类与封闭类

    前言 kotlin官网 (中文版)和kotlin教程学习教程的笔记。 一、数据类 数据类是仅仅包含状态而没有任何可...

  • Kotlin与Java混合开发(1)✔️数据类型映射

    Java 基本数据类型 与 Kotlin 数据类型映射Java 包装类 与 Kotlin 数据类型映射Java 常...

  • Kotlin 数据类

    功能 自动声明与构造函数入参同名的属性字段 自动实现每个属性字段的get/set方法 自动提供equals方法,比...

  • Kotlin数据类

    数据类 我们经常创建一些只保存数据的类。在这些类中,一些标准函数往往是从数据机械推导而来的。在Kotlin中,这叫...

  • Kotlin 数据类

    数据类就是只存储数据,不包含操作行为的类 数据类自动创建的函数编译器会根据主构造函数中声明的属性,自动创建以下3个...

网友评论

      本文标题:Kotlin 数据类

      本文链接:https://www.haomeiwen.com/subject/fghetrtx.html