2016-06-02 4 views
2

は、私たちは、私は私の結果を与える新しいオブジェクトを作成し、Kotlinで空のパラメータを処理する方法は? Javaで

A a= new A() 
a.setName("test") 

System.out.println(new Gson().toJson(a)) 

を、次のようなJSONを取得することができます

class A{ 
    int id; 
    String name; 

    public A(){} 
    public A(int id, String name){ 
    this.id = id; 
    this.name = name; 
    } 
    // getter/ setter 
} 

を次の操作を行うことができkotlinで

{"name":"test"} 

どのようにすることができます私はこれを達成する?

私が直面しています問題は、プリミティブ型を初期化する必要があると言ってkotlinです。ですから、jsonではidnameの両方を取得しています。これは私が

は、どのようにこれを行うにはしたくありません?

+0

あなたは 'int型のIDを持っているあなたは確かであり;'と 'ない整数ID;'? – miensol

答えて

6

Kotlintを使用すると、初期設定値について明示する必要がこれnull safety seriouslyを扱います。上記はdefault argumentsparameterless constructor on the JVMの両方を持っていることを

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

お知らせ:あなたの例では、に変換することができます。このみましょうあなたが書いた:

val a = A() 

と同様に:

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

私はこれを避けようとしていました。しかし、私はこれが唯一の方法だと思います。 – Mahabub

+0

二次コンストラクタは必要ありませんか?例では、単に 'クラスAすることができた(?:のInt =ヌル、VAR名:VARのID?文字列= null)の' – mfulton26

+0

mfulton26パラメータなしのコンストラクタ@は '' gson.fromJson(JSON、:: class.java)で使用されています – miensol

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を使用することの利点は、このように、あなたがnullチェックや?. dereferingの束を扱う避けるため、クラス内のNULL可能なプロパティの欠如です。

+0

lateinitプロパティは 'UninitializedPropertyAccessException'初期化されていない場合はアクセスし、例えば' Gson()。fromJson( "{}"、:: class.java).name'の原因となることに留意してください – Love

関連する問題