如何处理Kotlin中的空白参数?
在Java中,我们可以做以下
class A{ int id; String name; public A(){} public A(int id, String name){ this.id = id; this.name = name; } // getter/ setter }
那么我可以创建一个新的对象,并得到如下的JSON
A a= new A() a.setName("test") System.out.println(new Gson().toJson(a))
这给了我结果
{"name":"test"}
在kotlin我怎么能实现这个?
我面临的问题是kotlin说原始类型已被初始化。 所以在json中,我得到了id
和name
; 我不想要
那么如何做到这一点?
Kotlint 认真对待无效安全性,因此您必须明确初始化值。 你的例子可以被翻译成:
class A(var id: Int? = null, var name: String? = null)
注意,上面的JVM上都有默认参数和无参数的构造函数 。 这让你写:
val a = A()
以及:
val a = gson.fromJson(json, A::class.java)
lateinit
怎么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。