kotlin java 序列化 Serializable

data class Data(val name: String) : Serializable {

    companion object {
        @JvmStatic
        private val serialVersionUID: Long = 1L
    }

    private fun writeObject(oos: ObjectOutputStream) {
        oos.defaultWriteObject()
        println("called! writeObject")
    }

    private fun readObject(ois: ObjectInputStream) {
        ois.defaultReadObject()
        println("called! readObject")
    }

    fun test() {
        println("test")
    }
}
fun main() {
    val bos = ByteArrayOutputStream()
    ObjectOutputStream(bos).use {
        it.writeObject(Data("nb1"))
    }
    val bytes = bos.toByteArray()
    val bis = ByteArrayInputStream(bytes)
    val data = ObjectInputStream(bis).use {
        it.readObject() as Data
    }
    println(data)
    println(Data::class.declaredFunctions.find { it.name == "test" })
    println(Data::class.java.getDeclaredMethod("test"))
}

关于java与kotlin互调用的兼容性

fun loli.ball.Data.test(): kotlin.Unit
public final void loli.ball.Data.test()

Methods returning void

If a Java method returns void, it will return Unit when called from Kotlin. If by any chance someone uses that return value, it will be assigned at the call site by the Kotlin compiler since the value itself is known in advance (being Unit).