java - Kotlin 数据类与公开类?

标签 java kotlin model realm data-class

当我将我的 java 项目转换为 kotlin 项目时,我来了
了解 kotlin 中的数据类(Java 模型类的替换)。

现在我对我的 kotlin data class 有了要求支持RealmObject但根据链接
Kotlin data class of RealmObject ,它说 Realm 显然不支持数据类,所以我需要制作我的 data classopen 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 。

简而言之:数据类意味着作为值的容器,可以用作值。 开通 是一个不同的概念,它简单地归结为:可以被某个子类继承(在谈论方法时分别覆盖)。

长话短说:在您链接到的那个问题中,您被告知:
  • 你不能用 Realm 来处理 数据类(class)
  • 那里给出的例子只是假设你想扩展那个 Person 类,所以它被声明为 `open`

  • 我猜:除非你打算创建你的类的子类,否则你只需去 没有 打开关键字!编写标准的 kotlin,如果要扩展它们,请将它们打开。

    关于java - Kotlin 数据类与公开类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56607925/

    相关文章:

    java - 提示用户输入与特定模式匹配的密码

    android - 基于 API 级别的 GreenRobot EventBus 订阅

    activerecord - 将 Yii 中的表单数据获取到 CActiveRecord 模型适用于一种模型,但不适用于另一种模型

    Java 表示一个月中日期的最佳方式/推荐数据结构,例如 1 月 1 日

    java - 设置新的蒙版抓取 JAVA

    Intellij IDEA 中的 Java 预处理支持

    android - 在 ViewModel 中观察 LiveData 最佳实践

    java - 我想从三个不同的列表中获得一个结果

    node.js - Sequelize MySQL 模型

    mysql - Laravel 4 模型 Eloquent 关系