Как обрабатывать пустой параметр в Котлине?

В 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"} 

В котлин, как я могу это достичь?

Проблема, с которой я столкнулся, – это котлин, говорящий, что примитивный тип должен быть инициализирован. Итак, в json я получаю как id и name ; который я не хочу

Итак, как это сделать ???

Solutions Collecting From Web of "Как обрабатывать пустой параметр в Котлине?"

Kotlint серьезно относится к нулевой безопасности, поэтому вы должны явно указывать значения инициализации. Ваш пример можно перевести на:

 class A(var id: Int? = null, var name: String? = null) 

Обратите внимание, что вышеприведенные аргументы по умолчанию и конструктор без параметров на JVM . Это позволит вам написать:

 val a = A() 

Так же как:

 val a = gson.fromJson(json, A::class.java) 

Как насчет 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 заключается в отсутствии свойств lateinit внутри класса, таким образом, вы избегаете иметь дело с пустом нулевой проверки и ?. derefering.