我有一个用于Room的数据类。在课程的开头,有日期字段,格式为字符串_dateControl和_timeCreate。类的主体中有long类型的dateControl和timeCreate字段。通过翻新请求数据时,将分别初始化dateControl和timeCreate字段。但是,如果我尝试声明一个类的实例,则这些字段(dateControl和timeCreate)不会初始化,并且等于0。
班级
@Entity
class DetailNum(
@SerializedName("id_ndt_res")
@PrimaryKey val id: Int,
@SerializedName("id_pr")
val idEntUser: Int,
@SerializedName("id_parts")
val type: Int,
@SerializedName("dt_controlya")
var _dateControl: String,
@SerializedName("number_part")
var numDetail: String?,
@SerializedName("god_izg")
var yearCreate: Int,
@SerializedName("id_zavods")
var idFactory: Int,
@SerializedName("time_create")
var _timeCreate: String,
@SerializedName("id_result")
var resultControl: Int,
@SerializedName("familiya_i_o_speca")
var fioSpec: String?,
@SerializedName("is_new_part")
var isNew: Int,
@SerializedName("is_from_pto")
var isFromPto: Int,
@SerializedName("is_not_kriterii_01_08_2013")
var isNotKrit01082013: Int,
@SerializedName("isLoaded")
var isLoaded: Int = 0
) {
public fun getSimpleDateStr() = SimpleDateFormat("dd.MM.yyyy").format(Date(dateControl))
val strResultControl: String
get() = resultControl.toString()
var dateControl: Long = 0
set(value) {
val date = SimpleDateFormat("dd.MM.yyyy").parse(_dateControl)
field = date.time
}
var timeCreate: Long = 0
set(value) {
val date = SimpleDateFormat("dd.MM.yyyy HH:mm:ss").parse(_timeCreate)
field = date.time
}
var nameResult:String?=""
fun getFirstCharNameResult() = if(!nameResult.isNullOrEmpty()) nameResult?.get(0)?.toUpperCase() else ""
}
尝试这样的初始化
var detailNum = DetailNum(0, 0, 0, DateUtils.getSimpleDateStr(Date()), "", 0, 0, DateUtils.getSimpleDateStr(Date()), 0,"", 0, 0, 0 )
为什么在第二种情况下未初始化长日期字段,以及如何初始化它们?我是科特林的新人,请先解释一下,谢谢
答案 0 :(得分:0)
对类似下面的变量使用lateinit
lateinit var subject: TestSubject
答案 1 :(得分:0)
您的字段dateControl
和timeCreate
未在构造函数中初始化!如果不是某些框架,则不会自动调用他们的setter。
如果希望在构造函数初始化后立即设置它们,则可以:
1)..立即设置默认值
val dateControl: Long = SimpleDateFormat("dd.MM.yyyy").parse(_dateControl).time
2)..或如果操作需要更多代码,或者您想将内部字段初始化集合在一起,则使用init
class DetailNum(...) {
var dateControl: Long = 0
init {
dateControl = SimpleDateFormat("dd.MM.yyyy").parse(_dateControl).time
...
}
}
有关构造函数和init
的更多信息,您可以找到here。
顺便说一句:您的设置者根本不使用提供的值,因此实际上它们是无用的。