您的位置:首页 > Web前端 > JavaScript

kotlin fastjson:defalut constructor not found

2018-03-29 16:53 459 查看
JSON.parseObject(string, XXXXXXXXXXXXXXXX::class.javaObjectType)
在kotlin中,数据类使用data class
这是fastjson在kotlin语言下生成实体类的方式,但是会经常出现很多问题

问题:defalut constructor not found
1.data class 参数生成默认值

    如:data class A (var a: String = "")
2.前面的解决方式只在fastjson版本号小于1.2.24时起作用,在高于这个版本时还是会出现这个问题,跟踪fastjson源码发现paramNames = TypeUtils.getKoltinConstructorParameters(clazz);
public static String[] getKoltinConstructorParameters(Class clazz) {
if (kotlin_kclass_constructor == null && !kotlin_class_klass_error) {
try {
Class class_kotlin_kclass = Class.forName("kotlin.reflect.jvm.internal.KClassImpl");
kotlin_kclass_constructor = class_kotlin_kclass.getConstructor(Class.class);
kotlin_kclass_getConstructors = class_kotlin_kclass.getMethod("getConstructors");

Class class_kotlin_kfunction = Class.forName("kotlin.reflect.KFunction");
kotlin_kfunction_getParameters = class_kotlin_kfunction.getMethod("getParameters");

Class class_kotlinn_kparameter = Class.forName("kotlin.reflect.KParameter");
kotlin_kparameter_getName = class_kotlinn_kparameter.getMethod("getName");
} catch (Throwable e) {
kotlin_class_klass_error = true;
}
}
...
}


从红色标记的类来看,fastjson中
getKoltinConstructorParameters()
使用了kotlin.reflect.***但是这个包默认的情况下工程没有api(android 3.0中),所以会导致无法找到这些类
解决:api "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐