Tag: 数据类

如何模仿或实现Kotlin数据类的IS-A关系

我一直在探索Kotlin,写了一个小程序/脚本来完成我觉得无聊的任务。 在程序的开发中,我使用数据类来表示播放列表。 在设计中的一个点上,我想有一个特殊types的Playlist EmptyPlaylist 。 我无法得到这个工作。 你将如何实现与Kotlin的这种关系? 在Java中,我只是扩展Playlist (或者可能为它们创建一个接口/抽象类来inheritance)。 我只是希望能够有一个List而不是List 最后,我创建了一个Playlist对象,但是我感兴趣的是可以创建带有数据类的IS-A层次结构。

Kotlin数据类拷贝方法不是深拷贝所有成员

有人可以解释Kotlin数据类的copy方法是如何工作的吗? 对于一些成员来说,(深)副本似乎并没有真正创建,而且引用仍然是原来的。 fun test() { val bar = Bar(0) val foo = Foo(5, bar, mutableListOf(1, 2, 3)) println(“foo : $foo”) val barCopy = bar.copy() val fooCopy = foo.copy() foo.a = 10 bar.x = 2 foo.list.add(4) println(“foo : $foo”) println(“fooCopy: $fooCopy”) println(“barCopy: $barCopy”) } data class Foo(var a: Int, val bar: Bar, val list: MutableList = […]

处理多个对象实例的最佳方法

部分原因是我不能在Kotlin中创建没有参数的数据类,所以我使用object s来处理这些情况,例如 sealed class Node { object Leaf : Node() data class Branch(val left:Node, val right:Node) : Node() } 问题是,有时候,我最终得到了Leaf类的多个实例。 显然这不应该普遍发生,但是在使用一些框架和一些测试用例序列化和反序列化时会发生这种情况。 现在,你可能会争辩说我应该修正这些情况,但是很难知道它们可能在哪里,而不总是可能或者不希望修改框架的反序列化语义。 因此,我希望我的object的所有实例的行为都是相同的值,就像无参数data class (或Scala中的无参数的case class )一样。 到目前为止,我的最佳解决方案是以下内容,包括在我创建的每个可能遇到此问题的对象中: object SaneLeaf { override fun hashCode() = javaClass.hashCode() override fun equals(other: Any?) = other?.javaClass == javaClass } 很明显,这是冗长而且容易出错的,因为把这些实现抽象到一个接口似乎是不可能的。 如果对象不需要扩展另一个类,那么超类就可以工作,但情况往往不是这样。 或者,我可以用Nothing参数创建一个数据类。 但是,这似乎更像是一个黑客。 别人怎么处理这个问题呢? 是否有计划添加hashCode和equals实现对象的假定这些类的语义(所有实例应该是相同/相同的hashCode)?

如何使用数据类的简单inheritance?

在java中, abstract class NumericValue{ private String a; private String b; public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } @Override public boolean equals(Object o) { if (this == o) return true; if […]

Kotlin:如何inheritance数据类中的属性

我有这样的抽象令牌类: abstract class Token(var index: Int = 0) { open fun merge(toMerge: Token): Token? { return null } } 我想inheritance数据类中的索引属性,如下所示: data class CloseLoop(index: Int, var openLoopIndex: Int = 0) : Token(index) 但它给我错误Data class primary constructor must have only property (val / var) parameters 我需要做什么来解决这个问题?

搜索kotlin空数据类主构造函数的解决方法

用给定的kotlin代码: sealed class Event(val id:String= UUID.randomUUID().toString(), val timestamp:Instant = Instant.now()) data class BarEvent(val additionalInfo:String):Event() object FooEvent:Event() // data class CorrectFooEvent():Event() // invalid kotlin fun main(args: Array) { val b1 = BarEvent(“b1”) val f1 = FooEvent Thread.sleep(1000) val b2 = BarEvent(“b2”) val f2 = FooEvent println(“${b1.id} ${b1.timestamp} $b1”) println(“${f1.id} ${f1.timestamp} $f1”) println(“${b2.id} ${b2.timestamp} $b2”) println(“${f2.id} ${f2.timestamp} […]

Kotlin数据类到JSON与spring/jackson

我试图公开一些数据类作为JSON对象,但有些不工作。 我有以下数据类: data class Link( @JsonProperty(“rel”) @JsonView(View.Bind::class) val rel: String, @JsonProperty(“method”) @JsonView(View.Bind::class) val method: HttpMethod, @JsonProperty(“href”) @JsonView(View.Bind::class) val href: String) data class MetaData(val status: HttpStatus) { @JsonView(View.Bind::class) @JsonProperty(“status_code”) fun getStatusCode(): Int { return status.value() } @JsonView(View.Bind::class) @JsonProperty(“status_desc”) fun getStatusDesc(): String { return status.name } } data class Payload( @JsonView(View.Bind::class) @JsonProperty(“payload”) val payload: Any, @JsonProperty(“_meta”) @JsonView(View.Bind::class) […]

Kotlin数据类复制function不起作用

也许我错误地解释了data类的copyfunction是如何工作的,或者可能存在一个错误,但下面是copyfunction不能按预期工作的示例: 科特林: data class A { public var x: String? = null public var y: String? = null public var z: B = B.ONE } enum class B { ONE TWO THREE } Java的 A a1 = new A() a1.setX(“Hello”) a1.setY(“World”) a1.setZ(B.TWO) A a2 = a1.copy() // a2.x is null // a2.y is null // […]

Kotlin数据类和可空types

我是Kotlin的新手,我不知道为什么编译器会抱怨这个代码: data class Test(var data : String = “data”) fun test(){ var test: Test? = Test(“”) var size = test?.data.length } 编译器抱怨test?.data.length ,它说我应该做的: test?.data?.length 。 但数据variables是String ,而不是String? ,所以我不明白为什么我要把? 当我想检查长度。

将POJO转换为数据类Kotlin

最近我开始把我的Android项目从Java转换到Kotlin。 我在许多类中使用Retrofit从API中获取数据。 在我的项目中,有许多POJO,我需要手动将它们转换为数据类,因为它不适用于Android Studio的自动转换工具。 考虑我有模特类: public class LoginResponseMinimal { String firstName, lastName, token; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getToken() { return token; } public void setToken(String […]