2017-10-10 58 views
-1

我創建科特林這樣一個對象,並把它傳遞給我的方法:在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 Studio的抱怨,並說:

物業'fieldOne'是從未使用過

我知道我可以通過lint選項刪除此警告,但希望找到一種「原生」方式來擺脫此警告。

+0

我認爲你應該改變你的問題的標題,因爲在標題和正文中你會問兩個完全不同的東西。 –

回答

2

您的object的使用是用反射來完成的。實際的類有一個定義的構造函數,它的參數myFieldOnemyFieldThree

爲了您代碼的完整性,您應該考慮使用數據類來代替。 Kotlin like Java是靜態類型的,您應該儘可能地利用它。下一步就是擺脫你不需要做的任何反思。

+0

謝謝@tynn,數據類似乎是最合適的選擇。 –

0

我不知道你的意思是「原始的方式來擺脫它」,但有它的註釋:

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

當然,你可以創建一個數據類,但會有在這種情況下,匿名單例(object {})是更好的選擇,然後您將需要此註釋來告訴靜態代碼分析,這是需要的,而不是錯誤的。

+0

是的,'@Suppress(「未使用」)是皮棉選擇的一部分我並不完全相信使用。 –

+0

@lalongooo好的,我明白了。但正如我的第二段所表明的那樣,有些情況下你將不得不使用一個對象,因此也就是符號。我不會改變我的代碼設計,只是因爲我不喜歡可以忽略的Lint警告。林特只能知道這麼多,它不能猜測你的意圖,這就是爲什麼你使用註釋「告訴它」不再打擾你與你想過的事情。 –

+0

@lalongooo所以如果你聲明一個數據類並且只使用它一次,我寧願使用這個對象{} ...如果你使用了兩次數據類,就用它來代替 –

相關問題