2017-10-10 56 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所以如果你声明一个数据类并且只使用它一次,我宁愿使用这个对象{} ...如果你使用了两次数据类,就用它来代替 –

相关问题