数据类是一个简单的类,用于保存数据/状态并包含标准函数。 data关键字用于将一个类声明为数据类。
data class User(val name: String, val age: Int)
声明一个数据类必须至少包含一个带有属性参数(val或var)的主构造函数。
数据类内部包含以下函数:
如果要使用数据类在Java中创建用户条目,则需要大量数据。
import java.util.Objects; public class User { private String name; private int id; private String email; public User(String name, int id, String email) { this.name = name; this.id = id; this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public intgetId() { return id; } public void setId(int id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return getId() == user.getId() && Objects.equals(getName(), user.getName()) && Objects.equals(getEmail(), user.getEmail()); } @Override public inthashCode() { return Objects.hash(getName(), getId(), getEmail()); } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", id=" + id + ", email='" + email + '\'' + '}'; } }
使用用户类的对象调用上述Java数据类的构造函数
class MyClass{ public static void main(String agrs[]){ User u = new User("Ashu",101,"mymail@mail.com"); System.out.println(u); } }
输出:
User{name='Ashu', id=101, email='mymail@mail.com'}
以上java数据类代码在单行中以kotlin数据代码重写为
data class User(var name: String, var id: Int, var email: String)
使用用户类的对象调用kotlin数据类的构造函数
fun main(agrs: Array<String>) { val u = User("Ashu", 101, "mymail@mail.com") println(u) }
输出:
User(name=Ashu, id=101, email=mymail@mail.com)
Kotlin数据类仅关注数据,而不关注代码实现。
让无涯教程看一个没有数据类的简单程序。在此类中,无涯教程尝试使用其对象打印Product类的引用。
class Product(varitem: String, var price: Int) fun main(agrs: Array<String>) { val p = Product("laptop", 25000) println(p) }
在打印产品类的引用时,它将显示带有产品类名称的hashCode()。它不打印数据。
输出:
Product(name=laptop, price=25000)
使用数据类重写上述程序,并打印产品类的引用并显示对象的数据。发生这种情况是因为数据类内部包含toString(),该toString()显示object的字符串表示形式。
data class Product(varitem: String, var price: Int) fun main(agrs: Array<String>) { val p = Product("laptop", 25000) println(p) }
输出:
Product(name=laptop, price=25000)
equal()方法用于检查其他对象是否“等于”当前对象。在两个或多个hashCode()之间进行比较时,如果hashCode()相等,则equals()方法返回true,否则返回false。
链接:https://www.learnfk.comhttps://www.learnfk.com/kotlin/kotlin-data-class.html
来源:LearnFk无涯教程网
例如,让无涯教程看一个示例,其中一个普通类将具有相同数据的相同类Product的两个引用进行比较。
class Product(varitem: String, var price: Int) fun main(agrs: Array<String>) { val p1 = Product("laptop", 25000) val p2 = Product("laptop", 25000) println(p1==p2) println(p1.equals(p2)) }
在上面的程序中,参考p1和参考p2具有不同的参考。由于p1和p2中的参考值不同,进行比较显示为false。
输出:
true true
使用数据类重写以上程序,打印产品类的引用并显示对象的数据。
hashCode()方法返回对象的哈希码。如果两个对象相等,则hashCode()会产生相同的整数结果。
data class Product(varitem: String, var price: Int) fun main(agrs: Array<String>) { val p1 = Product("laptop", 25000) val p2 = Product("laptop", 25000) println(p1==p2) println(p1.equals(p2)) }
输出:
true true
数据类提供了copy()方法,该方法用于创建对象的副本。使用copy()方法,可以更改对象的某些或全部属性。
例如:
data class Product(var item: String, var price: Int) fun main(agrs: Array<String>) { val p1 = Product("laptop", 25000) println("p1 object contain data : $p1") val p2 = p1.copy() println("p2 copied object contains default data of p1: $p2") val p3 = p1.copy(price = 20000) println("p3 contain altered data of p1 : $p3") }
输出:
p1 object contain data : Product(item=laptop, price=25000) p2 copied object contains default data of p1: Product(item=laptop, price=25000) p3 contain altered data of p1 : Product(item=laptop, price=20000)
无涯教程还可以在数据类的主构造函数中分配默认参数。如果需要,可以在以后的程序中更改这些默认值。
例如:
data class Product(var item: String = "laptop", var price: Int = 25000) fun main(agrs: Array<String>) { val p1 = Product(price = 20000) println(p1) }
输出:
Product(item=laptop, price=20000)
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)