在 Kotlin 中向 List 添加静态和实例方法
Adding static and instance methods to List in Kotlin
我正在尝试将 Kotlin support 添加到 quicktype,以便 Kotlin 开发人员可以轻松地从 JSON.
在 Kotlin 中生成类型和编组代码
对于任何给定的 JSON 示例,我想使用 T.fromJson
静态方法和 T.toJson
实例方法生成一个类型 T
,但是当顶级类型不是对象。例如,给定 JSON
[
{ "name": "David" }
]
quicktype sample.json -t People -l kotlin
产生:
// To parse the JSON, add this file to your project and do:
//
// val people = People.fromJson(jsonString)
import com.beust.klaxon.*
private val klaxon =
Klaxon()
typealias People = List<Person>
data class Person (
val name: String
) {
public fun toJson() = klaxon.toJsonString(this as Any)
companion object {
public fun fromJson(json: String) = klaxon.parse<Person>(json)
}
}
我现在需要做的是弄清楚如何将 fromJson
和 toJson
方法添加到 People
类型。这是我的第一次尝试:
open class People {
public fun toJson() = klaxon.toJsonString(this as Any)
companion object {
public fun fromJson(json: String) = klaxon.parseArray<Person>(json)
}
}
但是我不能写 open class People
所以我删除了别名:
open class List<Person> {
public fun toJson() = klaxon.toJsonString(this as Any)
companion object {
public fun fromJson(json: String) = klaxon.parseArray<Person>(json)
}
}
但是现在people.toJson()
编译不通过,因为编译器找不到方法
我可以在 Kotlin 中完成我想要的语义吗?
您可以使用
class People : List<Person>()
不过,我个人会使用以下通用顶级函数进行简化:
fun <T> T.toJson() = Klaxon().toJsonString(this as Any)
fun <T> fromJson(json: String) = Klaxon().parse<T>(json)
fun <T> fromJsonArray(json: String) = Klaxon().parseArray<T>(json)
我正在尝试将 Kotlin support 添加到 quicktype,以便 Kotlin 开发人员可以轻松地从 JSON.
在 Kotlin 中生成类型和编组代码对于任何给定的 JSON 示例,我想使用 T.fromJson
静态方法和 T.toJson
实例方法生成一个类型 T
,但是当顶级类型不是对象。例如,给定 JSON
[
{ "name": "David" }
]
quicktype sample.json -t People -l kotlin
产生:
// To parse the JSON, add this file to your project and do:
//
// val people = People.fromJson(jsonString)
import com.beust.klaxon.*
private val klaxon =
Klaxon()
typealias People = List<Person>
data class Person (
val name: String
) {
public fun toJson() = klaxon.toJsonString(this as Any)
companion object {
public fun fromJson(json: String) = klaxon.parse<Person>(json)
}
}
我现在需要做的是弄清楚如何将 fromJson
和 toJson
方法添加到 People
类型。这是我的第一次尝试:
open class People {
public fun toJson() = klaxon.toJsonString(this as Any)
companion object {
public fun fromJson(json: String) = klaxon.parseArray<Person>(json)
}
}
但是我不能写 open class People
所以我删除了别名:
open class List<Person> {
public fun toJson() = klaxon.toJsonString(this as Any)
companion object {
public fun fromJson(json: String) = klaxon.parseArray<Person>(json)
}
}
但是现在people.toJson()
编译不通过,因为编译器找不到方法
我可以在 Kotlin 中完成我想要的语义吗?
您可以使用
class People : List<Person>()
不过,我个人会使用以下通用顶级函数进行简化:
fun <T> T.toJson() = Klaxon().toJsonString(this as Any)
fun <T> fromJson(json: String) = Klaxon().parse<T>(json)
fun <T> fromJsonArray(json: String) = Klaxon().parseArray<T>(json)