关于kotlin的泛型问题

import kotlin.reflect.KProperty
import kotlinx.serialization.*
import kotlinx.serialization.json.JSON.Companion.stringify
class Delegate<T: Any>(val key: String, private val default: T) {
  operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
    return "$thisRef, thank you for delegating '${property.name}' to me!"
  }

  operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
    println("$value has been assigned to '${property.name}' in $thisRef.")
    stringify(default)
  }
}
fun main(args: Array<String>) {
  var t by Delegate("test", Data("t"))
}
@Serializable
data class Data(val name: String)

图片描述
图片描述

Delegate类的泛型我约束为Any下的字类,为什么stringify 不接收

阅读 2.8k
1 个回答
import kotlin.reflect.KProperty
import kotlinx.serialization.*
import kotlinx.serialization.json.JSON.Companion.stringify

class Delegate(val key: String, private val default: Data) {

//    init {
//        println(stringify(default))
//    }

    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        return "$thisRef, thank you for delegating '${property.name}' to me!"
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        println("$value has been assigned to '${property.name}' in $thisRef.")
        stringify(default)
    }
}

fun main(args: Array<String>) {
    var t by Delegate("test", Data("t"))

}

@Serializable
data class Data(val name: String)

不用泛型就没问题,这里应该是不能用泛型,应该是serialization在编译期就要告诉它确切的类型


https://github.com/JetBrains/...
reified需要一个确定的类型

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题