kotlin fastjson:defalut constructor not found

本文探讨了FastJSON在解析Kotlin数据类时遇到的问题,特别是在使用默认构造函数和生成实体类方面。文章分析了问题产生的原因,并提供了解决方案,包括引入kotlin-reflect依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值