无法使用tornadofx视图模型绑定可为空的属性

问题描述

我正在尝试将域模型中的可为空的属性(字符串?)绑定到tornadofx视图模型。但是我得到一个编译器错误。 可为空的属性是:idCard,电话和出勤

我的代码

class Patient(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<Patient>(Patients)
    var patientId: Int by Patients.patientId
    var name: String by Patients.name
    var lastName: String by Patients.lastName
    var recordNumber: Int by Patients.recordNumber
    var idCard: String? by Patients.idCard
    var phone: String? by Patients.phone
    var age: Int by Patients.age
    var gender: Char by Patients.gender
    var admission: DateTime by Patients.admission
    var discharge: DateTime? by Patients.discharge
    var specialty: String by Patients.specialty
}
class Patientviewmodel(patient: Patient) : viewmodel() {
    val patientId = bind { patient.observable(Patient::patientId) }
    val name = bind { patient.observable(Patient::name)}
    val lastName = bind { patient.observable(Patient::lastName) }
    val recordNumber = bind { patient.observable(Patient::recordNumber) }
    val idCard = bind { patient.observable(Patient::idCard) }
    val phone = bind { patient.observable(Patient::phone)}
    val age = bind { patient.observable(Patient::age) }
    val gender = bind { patient.observable(Patient::gender) }
    val admission = bind { patient.observable(Patient::admission) }
    val discharge = bind { patient.observable(Patient::discharge) }
    val specialty = bind { patient.observable(Patient::specialty) }
}

编译器错误

e: D:\projects\manager\src\main\kotlin\manager\model\Patient.kt: (49,18): Type inference Failed: Cannot infer type parameter T in inline fun <reified PropertyType : Property<T>,reified T : Any,ResultType : PropertyType> bind(autocommit: Boolean = ...,forceObjectProperty: Boolean = ...,defaultValue: T? = ...,noinline propertyProducer: () -> PropertyType?): ResultType
None of the following substitutions
(Boolean,Boolean,String?,() -> Property<String?>?)
(Boolean,Any?,() -> Property<String?>?)
can be applied to
(() -> ObjectProperty<String?>)

解决方法

尝试使用模型绑定执行此操作:

val patientId = bind(Patient::patientId)