在java中我们可以执行以下操作
class A{
int id;
String name;
public A(){}
public A(int id, String name){
this.id = id;
this.name = name;
}
// getter/ setter
}
然后我可以创建一个新的Object并获得json,如下所示
A a= new A()
a.setName("test")
System.out.println(new Gson().toJson(a))
给我结果
{"name":"test"}
在kotlin,我怎么能做到这一点?
我面临的问题是kotlin说原始类型必须被初始化。所以在json中我得到id
和name
;我不想要
那怎么办?
答案 0 :(得分:6)
Kotlint会对null safety seriously进行处理,因此您必须明确初始化值。您的示例可以转换为:
class A(var id: Int? = null, var name: String? = null)
请注意,上述内容同时包含default arguments和parameterless constructor on the JVM。这是你写的:
val a = A()
以及:
val a = gson.fromJson(json, A::class.java)
答案 1 :(得分:1)
lateinit
怎么样?
/* ***************************************************************************/
class A() {
lateinit var id : Integer // Integer instead of Int due to lateinit's no-primitives requirement
lateinit var name : String
constructor(id : Integer, name : String) : this() {
this.id = id
this.name = name
}
}
/* ***************************************************************************/
/* ***************************************************************************/
fun main(args: Array<String>) {
val a = A()
a.name = "test"
assert(Gson().toJson(a) == """{"name":"test"}""")
val aFromJson = Gson().fromJson("""{"name":"test"}""", A::class.java)
assert(a.name == "test")
}
/* ***************************************************************************/
使用lateinit
的优点是类内缺少可空属性,因此,您可以避免处理一堆空检查和?.
derefering。