在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 Studio的抱怨,并说:
物业'fieldOne'是从未使用过
我知道我可以通过lint选项删除此警告,但希望找到一种“原生”方式来摆脱此警告。
您的object
的使用是用反射来完成的。实际的类有一个定义的构造函数,它的参数myFieldOne
到myFieldThree
。
为了您代码的完整性,您应该考虑使用数据类来代替。 Kotlin like Java是静态类型的,您应该尽可能地利用它。下一步就是摆脱你不需要做的任何反思。
谢谢@tynn,数据类似乎是最合适的选择。 –
我不知道你的意思是“原始的方式来摆脱它”,但有它的注释:
val myObject = @Suppress("unused") object {
@SerializedName("fieldOne")
val fieldOne = myFieldOne
// ...
}
当然,你可以创建一个数据类,但会有在这种情况下,匿名单例(object {}
)是更好的选择,然后您将需要此注释来告诉静态代码分析,这是需要的,而不是错误的。
是的,'@Suppress(“未使用”)是皮棉选择的一部分我并不完全相信使用。 –
@lalongooo好的,我明白了。但正如我的第二段所表明的那样,有些情况下你将不得不使用一个对象,因此也就是符号。我不会改变我的代码设计,只是因为我不喜欢可以忽略的Lint警告。林特只能知道这么多,它不能猜测你的意图,这就是为什么你使用注释“告诉它”不再打扰你与你想过的事情。 –
@lalongooo所以如果你声明一个数据类并且只使用它一次,我宁愿使用这个对象{} ...如果你使用了两次数据类,就用它来代替 –
我认为你应该改变你的问题的标题,因为在标题和正文中你会问两个完全不同的东西。 –