2017-10-10 10 views
-1

私はKotlinでこのようなオブジェクトを作成し、私のメソッドに渡し:Kotlinの "オンザフライ"で作成されたクラスオブジェクトにコンストラクタがありますか?

val myObject = object { 

     @SerializedName("fieldOne") 
     val fieldOne = myFieldOne 

     @SerializedName("fieldTwo") 
     val fieldTwo = myFieldTwo 

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

    dbManager.save(myObject) // this works fine 

しかし、Androidのメーカーはそれについて不平を言うと言う:

プロパティ「」fieldOne「」

を使用したことがないです

この警告はlintオプションで削除できますが、この警告を取り除くための「ネイティブ」な方法を探したいと思います。

+0

タイトルと本文で2つの全く異なるものを求めているので、あなたの質問のタイトルを変更する必要があると思います。 –

答えて

2

あなたのobjectの使用は、反射で行われます。実際のクラスには、パラメータmyFieldOnemyFieldThreeを持つコンストラクタが定義されています。あなたのコードの健全性のために

、あなたの代わりにデータクラスを使用して検討すべきです。 KotlinのようにJavaは静的な型であり、可能な限り活用する必要があります。次のステップは、あなたがする必要のない反射を取り除くことです。

+0

@tynnありがとう、データクラスは、これのための最も適切なオプションのようです。 –

0

私はあなたが「それを取り除くためにネイティブな方法」によって何を意味するのか分からないが、それのための注釈があります:

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

確かに、あなたは、データクラスを作成することができますが、そこになります匿名シングルトン(object {})がより良い選択である場合に、この注釈が必要であり、これは、静的コード分析に、これが間違いではなく望まれることを伝えるために必要です。

+0

はい、 '@Suppress(" unused ")'はlint optinsの一部です。私は完全に使用すると確信していません。 –

+0

@lalongooo ok、そうです。しかし、私の2番目のパラグラフが示唆するように、オブジェクト{}を使用しなければならない場合があります。無視することができるリント警告が気に入らないので、私は自分のコードデザインを変更しません。リントはあまり知っているだけで、あなたの意図を推測することはできません。だからこそ、あなたは思ったことをもう気にしないように注釈を使用します。 –

+0

@lalongoooデータクラスを宣言して一度しか使用しない場合は、オブジェクト{}を使用します。データクラスを2回使用する場合は、その代わりに –

関連する問題