PropertyModel不能与Kotlin的私有字段一起使用get()

时间:2018-01-15 20:01:11

标签: kotlin wicket

如果kotlin的模型有一个字段:

class MyModel {
  private val theValue: Double
    get()  { return 1.0 }
}

并在wicket页面中:

new PropertyModel(model , "theValue")

它会失败:

WicketRuntimeException: Property could not be resolved for class: class MyModel expression: theValue

解决方案:删除私有修饰符:

class MyModel {
  val theValue: Double
    get()  { return 1.0 }
}

有没有办法解决这个问题(保留私有修饰符)?

(wicket 7.9.0,Kotlin 1.2)

1 个答案:

答案 0 :(得分:2)

由于需要读取和写入模型,因此模型必须具有带备用字段的属性。

class MyModel {
  private val theValue: Double
    get()  { return 1.0 }
}

即使您删除了private修饰符,也没有支持字段。

试试这样:

class MyModel {
  var theValue = 1.0
}

或如果您需要equals()hashCode()等开箱即用:

data class MyModel(var theValue: Double = 1.0)

注意:Wicket是一个Java框架。在它的documentation中明确指出,你需要一个Java bean作为模型,它在第二个代码片段中。