【发布时间】:2019-10-29 06:30:14
【问题描述】:
我有一个在 Room 中使用的数据类。在类的开头有字符串 _dateControl 和 _timeCreate 形式的日期字段。类的主体中有 Long 类型的 dateControl 和 timeCreate 字段。通过 Retrofit 请求数据时,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 )
为什么第二种情况下长日期字段没有初始化,如何初始化?我是Kotlin的新手,请解释一下,提前谢谢
【问题讨论】:
标签: android class kotlin constructor