我对 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.