2016-06-02 2 views
2

우리는 그때 나에게 결과를 제공하는 새로운 객체를 생성하고Kotlin에서 빈 매개 변수를 처리하는 방법은 무엇입니까? 자바에서

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 
} 

을 다음을 수행 할 수 있습니다 코 틀린에

{"name":"test"} 

어떻게 나는 이것을 얻는다?

내가 직면 한 문제는 기본 유형을 초기화해야한다고 말하는 kotlin입니다. 그래서 json에서 나는 idname을 모두 얻고 있습니다. 나는 원하지 않는다

이렇게하는 방법 ???

+0

'int id;'가 아니라'int 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

보조 생성자가 필요하지 않습니다. 이 예제는 단순히'class A (var id : Int? = null, var name : String? = null) '일 수 있습니다. – mfulton26

+0

@ mfulton26 매개 변수없는 생성자는'gson.fromJson (json, A :: 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 속성은'Gson(). fromJson ("{}", A :: class.java) .name'과 같이 액세스 할 때 초기화되지 않은 경우 UninitializedPropertyAccessException을 발생시킵니다. – Love