2017-10-10 1 views
-1

나는 코 틀린이 같은 객체를 생성하고 내 방식에 전달 :Kotlin의 "on the fly"클래스 객체가 생성자를 가질 수 있습니까?

val myObject = object { 

     @SerializedName("fieldOne") 
     val fieldOne = myFieldOne 

     @SerializedName("fieldTwo") 
     val fieldTwo = myFieldTwo 

     @SerializedName("fieldThree") 
     val fieldThree = myFieldThree 
    } 

    dbManager.save(myObject) // this works fine 

그러나, 안드로이드 스튜디오 그것에 대해 불평 다음과 같이 말한다 :

재산권 ''fieldOne ''

을 사용한 적이있다

나는이 경고를 lint 옵션을 통해 제거 할 수 있지만이 경고를 제거하는 "기본"방법을 찾고 싶습니다.

+0

제목과 본문에서 완전히 다른 두 가지를 묻기 때문에 질문의 제목을 변경해야한다고 생각합니다. –

답변

2

object의 사용은 반사를 통해 이루어집니다. 실제 클래스에는 매개 변수 myFieldOne ~ myFieldThree을 갖는 생성자가 정의되어 있습니다.

코드의 정확성을 위해 데이터 클래스을 대신 사용해보십시오. Kotlin과 같습니다. Java은 정적으로 입력되었으므로 가능한 한 많이 사용해야합니다. 다음 단계는 당신이 할 필요가없는 모든 반사를 없애는 것입니다.

val myObject = @Suppress("unused") object { 
    @SerializedName("fieldOne") 
    val fieldOne = myFieldOne 
    // ... 
} 

물론, 당신은 데이터 클래스를 만들 수 있지만이있을 것이다 :

난 당신이 무슨 뜻인지 모르는
+0

@tynn에게 감사드립니다. 데이터 클래스가 이에 가장 적합한 옵션 인 것 같습니다. –

0

"기본 방법은 그것을 제거하기 위해"하지만에 대한 주석이 익명의 싱글 톤 (object {})이 더 나은 선택인데,이 주석이 정적 코드 분석에 실수로 필요한 것이 아니라고 말하기 위해 필요하다.

+0

그래,'@Suppress ("unused")'는 보푸라기의 일부이다. 나는 완전히 사용하도록 확신하지 않는다. –

+0

@lalongooo ok, 알겠습니다. 하지만 두 번째 단락에서 알 수 있듯이 {} 객체와 표기법을 사용해야하는 경우가 있습니다. 무시할 수있는 린트 (lint) 경고가 마음에 들지 않기 때문에 코드 디자인을 변경하지 않을 것입니다. 보푸라기는 너무 많이 알기 만하고 의도를 추측 할 수 없기 때문에 생각했던 것 때문에 더 이상 귀찮게하지 말라고 주석을 사용합니다. –

+0

@lalongooo 데이터 클래스를 선언하고 한 번만 사용한다면, 데이터 클래스를 두 번 사용하는 대신 객체 {}를 사용하는 것이 좋습니다. –

관련 문제