当我将Java项目转换为kotlin项目时,我来了 了解kotlin中的数据类(替换Java模型类)。
现在我需要我的kotlin data class
支持RealmObject
,但根据链接
Kotlin data class of RealmObject,它表示Realm中显然不支持数据类,因此我需要将data class
设置为open class
。
所以基本上,我想知道这两个术语之间的区别。
答案 0 :(得分:3)
数据类用于保存值。从Java Bean的角度来看,它们的主要目的是包装一些值。
使Java Bean真正变得丑陋的原因是,理想应该了解您的字段的许多重要方法,例如equals()
,hashcode()
或toString()
class ...继承自java.lang.Object。因此,它们无济于事。
当您在Kotlin中声明data class
时,Kotlin编译器只需为所有这些方法添加一个合理的实现。参见kotlin-lang:
编译器自动从所有派生以下成员 在主要构造函数中声明的属性:
- equals()/ hashCode()对;
- toString()的形式为“ User(name = John,age = 42)”;
换句话说:当该用户类是数据类时,并且当您有两个时
用户使用User(name=John, age=42)
声明的对象,则这两个对象将相等,因为生成的 equals()
方法将比较这些数据类对象中的名称和年龄。
另一方面,开放类是开放进行扩展的普通类。含义:默认情况下,当您在Kotlin中编写课程时,可以不进行扩展。是的,默认情况下防止继承。通过声明一个打开的类,您告诉编译器:“我打算扩展该类”。换句话说:如果您想拥有Child extends Base
,那么您的Base
类必须在Kotlin中声明为 open 。
简而言之: data 类的意思是值的容器,可以用作该类。 开放是一个不同的概念,它可以简单地归结为:可以被某些子类继承(在谈论方法时分别被覆盖)。
长话短说:在您链接到的问题中,系统会告诉您:
我猜:除非您打算创建类的子类,否则只需不用 open关键字即可!编写标准的kotlin,并在打算扩展它们时将其打开。