easyexcel ModelBuildEventListener中的buildUserModel应该优先使用全参数构造函数

x9ybnkn6  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(42)

建议先去看文档

快速开始常见问题

建议描述

在使用kotlin的data class的时候,默认这个类只有全参数构造函数,可以通过kotlin的noargs插件编译一个无参数构造函数。

但是在实际使用中,data class的参数经常都使用 val 标识符,导致生成的字段是没有set方法的,这样就会发现,程序运行没有错,但是运行到自己的ReadListener中的时候,对象实例的所有属性都是null,可以通过把 val 改成 var 来解决这个问题。

更好的解决方案应该是优先检查有没有全参数构造函数,没有的话再使用无参数构造函数,如果两个都不匹配就报错

643ylb08

643ylb081#

// 示例数据类
data class Person(val name: String, val age: Int)

// 示例 ReadListener
class MyReadListener : ReadListener {
    override fun onRead(person: Person) {
        // 处理从文件中读取的 Person 对象
        println("Person: $person")
    }
    
    // 处理无参数构造函数情况
    override fun onReadWithoutArgs() {
        // 创建一个默认实例
        val defaultPerson = Person("Default", 0)
        println("Default Person: $defaultPerson")
    }
}

fun main() {
    // 示例代码,模拟从文件中读取数据并调用 ReadListener
    val person = Person("Alice", 30)
    val listener = MyReadListener()

    // 检查全参数构造函数是否存在
    val constructors = Person::class.java.constructors
    val hasFullConstructor = constructors.any { it.parameterCount == 2 }

    // 根据是否存在全参数构造函数调用不同的方法
    if (hasFullConstructor) {
        listener.onRead(person)
    } else {
        listener.onReadWithoutArgs()
    }
}

相关问题