Kotlin 反射检查类属性是否为特定类型的 ArrayList

问题描述 投票:0回答:0

我对 Kotlin 和 Java 有点陌生,有以下问题:如何检查反映的属性类型是否为特定类型的 ArrayList,例如 ArrayList>?

背后的代码:

        class DataUploadFormData {
            var files: ArrayList<Pair<String, ByteArray>> = arrayListOf()
            var collection: String? = null
        }

        // DataUploadFormData type is passed here as T
        suspend inline fun <reified T : Any> mapFormData(data: MultiPartData): T? {
            val formData: FormData = getFormData(data)
            val model: T? = getValue()
            var fields = T::class.memberProperties
            fields.forEach { field ->
                if (field is KMutableProperty<*>) {
                    setFieldValue(field, formData, model)
                }
            }

            return model
        }


        @OptIn(ExperimentalStdlibApi::class)
        fun <T> setFieldValue(field: KMutableProperty<*>, formData: FormData, model: T?) {
            var value: Any? = null

            if (field.returnType.javaType == String::class.createType().javaType ||
                field.returnType.javaType == Int::class.createType().javaType ||
                field.returnType.javaType == Double::class.createType().javaType
            ) {
                value = formData.fields.firstOrNull(predicate = { it.first == field.name })?.second
            }
            else if (
            // check if field.returnType is of ArrayList<Pair<String, ByteArray>> type?
            ) {
                value = formData.files
            }

            field.setter.call(model, value)
        }

检查简单数据类型效果很好,但不知道如何检查反映的属性是否属于复杂类型。我尝试实例化属性并使用

is
instanceof
但我无法使用那样的代码实例化属性
field.returnType.javaType::class.createInstance()
。检查
field.returnType.classifier is ArrayList<*>
返回 false.

kotlin reflection typechecking
© www.soinside.com 2019 - 2024. All rights reserved.