当我将我的 java 项目转换为 kotlin 项目时,我来了
了解 kotlin 中的数据类(Java 模型类的替换)。
现在我对我的 kotlin data class
有了要求支持RealmObject
但根据链接
Kotlin data class of RealmObject ,它说 Realm 显然不支持数据类,所以我需要制作我的 data class
如 open class
.
所以基本上,我想知道这两个术语之间的区别。
最佳答案
数据类旨在保存值。在 Java Bean 意义上,它们的主要目的是包装一些值。
使Java bean 真正丑陋的是许多重要的方法,例如equals()
, hashcode()
或 toString()
理想情况下应该知道你的类的字段......是从java.lang.Object继承的。因此他们没有做任何有用的事情。
当您声明 data class
时在 Kotlin 中,Kotlin 编译器只是 添加 所有这些方法的合理实现。见 kotlin-lang :
The compiler automatically derives the following members from all properties declared in the primary constructor:
- equals()/hashCode() pair;
- toString() of the form "User(name=John, age=42)";
换句话说:当那个 User 类是一个数据类,当你有 两个
用
User(name=John, age=42)
声明的用户对象,那么这两个对象将相等,因为生成的 equals()
方法将比较这些数据类对象中的名称和年龄。安 开通 另一方面,类是一个普通类,即 打开 用于扩展。含义:默认情况下,当你在 Kotlin 中编写一个类时,它可以 不是 被延长。是的,继承是阻止 默认情况下。通过声明一个类是开放的,你告诉编译器:“我打算扩展这个类”。换句话说:如果你想拥有
Child extends Base
,然后是您的 Base
必须声明类 打开 在 Kotlin 。简而言之:数据类意味着作为值的容器,可以用作值。 开通 是一个不同的概念,它简单地归结为:可以被某个子类继承(在谈论方法时分别覆盖)。
长话短说:在您链接到的那个问题中,您被告知:
我猜:除非你打算创建你的类的子类,否则你只需去 没有 打开关键字!编写标准的 kotlin,如果要扩展它们,请将它们打开。
关于java - Kotlin 数据类与公开类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56607925/