当前位置: 首页 > 知识库问答 >
问题:

扩展Kotlin中的数据类

邢起运
2023-03-14

数据类似乎是Java中老式POJO的替代品。这些类将允许继承是可以预期的,但我看不到扩展数据类的方便方法。我需要的是这样的东西:

open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
open class Resource (open var id: Long = 0, open var location: String = "")
data class Book (
    override var id: Long = 0,
    override var location: String = "",
    var isbn: String
) : Resource()

共有1个答案

曾永新
2023-03-14

事实是:数据类不能很好地处理继承。我们正在考虑禁止或严格限制数据类的继承。例如,众所周知,无法在非抽象类的层次结构中正确实现equals()

所以,我所能提供的就是:不要在数据类中使用继承。

 类似资料:
  • 主要内容:扩展函数,扩展函数是静态解析的,伴生对象的扩展,扩展的作用域,扩展声明为成员Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。 扩展函数 扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式: receiverType:表示函数的接收者,也就是函数扩展的对象 functionName:扩展函数的名称 params:扩展函数的参数,可以为NULL 以下实

  • Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。 扩展函数 扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式: fun receiverType.functionName(params){ body } receiverType:表示函数的接收者,也就是函数扩

  • 在一个同时使用静态编程语言和java的Android项目中,我想在一些java文件中使用静态编程语言函数和。 所以我想到了使用扩展。我做了下面的工作, 然而,我曾考虑将分隔符作为参数传递,但在java中尝试使用“删除第二个参数…”时,它给了我一个错误 方法正确吗?能做到吗?

  • 根据类型将函数添加到类中的惯用方法是什么。下面的示例使用 List 作为类,并使用 Type 参数

  • 数据类可以扩展密封类,但不是,我不确定它们如何/是否能够接受“supertype”密封类所需的参数。 > 从密封类扩展常规类可以很好地编译。 但是,将其更改为数据类并不编译(“数据类主构造函数必须只具有属性(val/var)参数”)。 否则,我的选择似乎是使用选项1处理我自己的数据类功能(copy、hashcode、equals等),或者通过使用选项4打开超类型属性来进行折衷。

  • 我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。