gpt4 book ai didi

java - Kotlin 数据类与公开类?

转载 作者:行者123 更新时间:2023-12-02 12:35:50 24 4
gpt4 key购买 nike

当我将我的 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com