答案 0 :(得分:1)
我看到至少有两个POJO规则违反了提供的数据类。
1)该类具有公共的无参数构造函数
默认情况下,Kotlin不会为具有默认参数值(https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#overloads-generation)的函数生成重载
因此,已编译的类将只有一个带有两参数构造函数的构造函数,并且不会创建无参数构造函数。要强制Kotlin编译器生成多个重载,应使用@JvmOverloads
批注。在您的情况下,它将用于构造函数,因此我们还需要添加constructor
关键字:
data class SomeDataClass @JvmOverloads constructor
2)类中的所有非静态,非瞬态字段都是公共的(并且不是最终的),或者具有遵循Java bean命名约定的公共getter和setter方法。
由于您使用的是val
关键字,因此生成的字段将为final
,并且不会为它们生成设置器。因此,您可以将val
更改为var
,并且字段将不再是final
,并且还将生成正确的getter和setter。 (或者,您可以使用其他注释来防止生成getter和setter并公开https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#instance-fields的字段)
因此最终代码应如下所示:
data class SomeDataClass @JvmOverloads constructor(
var topic: String = "",
var message: String = ""
)