Tag: 数据类

Kotlin数据类到JSON与春天/杰克逊

我试图公开一些数据类作为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中,以下代码似乎是合理的: data class Foo(val bar: String) { fun combine(other: Foo): Foo { return Foo(bar + other.bar) } companion object Foo { fun someHelper() {} } } 但是,它不会编译:类型Foo绑定到Foo.Foo而不是Foo ! 这是(语言设计或编译器)的错误,还是这是一个功能? 如果是后者,伴侣对象在场的情况下实现的习惯用法是什么? 当然,我会考虑一个解决方法: fun combine(other: my.package.Foo): my.package.Foo { return Foo(bar + other.bar) } 但那不是太好,现在呢?

不可变(数据)类上的多个构造函数

我试图用多个构造函数实现一个不可变的数据类。 我觉得这样的事情应该是可能的: data class Color(val r: Int, val g: Int, val b: Int) { constructor(hex: String) { assert(Regex("#[a-fA-F0-6]{6}").matches(hex), { "$hex is not a hex color" } ) val r = hex.substring(1..2).toInt(16) val g = hex.substring(3..4).toInt(16) val b = hex.substring(5..6).toInt(16) this(r,g,b) } } 当然,事实并非如此:Kotlin预计主要构造函数的调用将在顶部声明: constructor(hex: String): this(r,g,b) { assert(Regex("#[a-fA-F0-6]{6}").matches(hex), { "$hex is not a hex color" […]

如何让一个数据类在Kotlin中实现Interface / extends Superclass属性?

我有几个数据类,其中包括一个var id: Int? 领域。 我想在接口或超类中表达这个,并且有数据类扩展,并在构造时设置这个id 。 但是,如果我尝试这样做: interface B { var id: Int? } data class A(var id: Int) : B(id) 它抱怨我重写id字段,我哈哈.. 问 :在这种情况下,如何让数据类A在构造时使用一个id ,并将接口或超类中声明的id设置为?

是否有一种方法要求泛型类型是Kotlin中的数据类?

以下不起作用,但希望可以帮助你明白我的意思: class Example<T : DataClass> 如果你想知道我正在努力完成什么,这是我想到的一个例子: class Repository<T> where T : Entity, // Entity defines mutable property 'id' T : DataClass { // assume there is a map here fun add(obj: T) { val copy = obj.copy(id = generateID()) map.put(copy.id, copy) } } 还是有更好的方法来完成我想要做的?

Kotlin数据类中的可变集合的防御副本

我想有一个接受只读列表的数据类: data class Notebook(val notes: List<String>) { } 但是它也可以接受MutableList ,因为它是List一个子类型。 例如下面的代码修改传入的列表: fun main(args: Array<String>) { val notes = arrayListOf("One", "Two") val notebook = Notebook(notes) notes.add("Three") println(notebook) // prints: Notebook(notes=[One, Two, Three]) } 有没有办法在数据类中执行传入列表的防御副本?

Kotlin:实现者必须是数据类的接口?

有一个接口,我可以扩展或其他方式来创建一个接口,从而实现的类必须是一个数据类? 访问诸如copy()之类的数据类API方法将是有用的。

Kotlin数据类从哪里扩展而来? 我可以扩充它们吗?

我一直在摆弄Kotlin data class并且考虑是否可以增加一些类(例如包含copy功能)来扩充所有data class ? 有没有可能扩充data class呢?

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

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

如何使用Gson反序列化继承的Kotlin数据类

在Android应用程序中,我需要为具有单一抽象级别的Kotlin数据类反序列化Json数据。 但我没有任何想法,在构造函数中放置正确的属性。 作为一个简单的版本,让我们说我有一个形状: abstract class Shape(open val x: Int, open val y: Int) 有两个派生 data class Circle(val radius: Int, override val x: Int, override val y: Int): Shape(x, y) 和 data class Square(val width: Int, override val x: Int, override val y: Int): Shape(x, y) 所以我的目标是,不要实例化一个形状。 所以,总是反序列化它的派生。 后来我需要处理其他类中的一些集合属性,如: val shapes: List<Shape> 但我也必须知道每个元素的派生类型。 当我试图用Gson反序列化给定的例子 val square […]