我在 TableView[Error]
中有一个类型为 TableColumn[Error, Boolean]
的表列 errorFixed
。我的 Error
类有一个 val fixed: Boolean
,我试图将其放入此表列中。
我试过了
errorFixed.cellValueFactory = features =>
ReadOnlyBooleanWrapper(features.value.fixed)
但它失败了
type mismatch;
found : scalafx.beans.property.ReadOnlyBooleanWrapper
required: scalafx.beans.value.ObservableValue[Boolean,Boolean]
我真的不明白 ObservableValue[Boolean,Boolean]
是 ReadOnlyBooleanWrapper
的父类(super class)型 according to the documentation .
如果我自己使用 .asInstanceOf[ObservableValue[Boolean, Boolean]]
转换它似乎有效。这是怎么回事?
最佳答案
简短的回答是:而不是
errorFixed.cellValueFactory = features =>
ReadOnlyBooleanWrapper(features.value.fixed)
你应该使用
errorFixed.cellValueFactory = features =>
ObjectProperty[Boolean](features.value.fixed)
或ReadOnlyObjectWrapper[Boolean]
。
长答案的简短版本:在使用原始 Java 类型(如 boolean 或 int)时,Scala 和 Java 之间存在某些“摩擦”。这种不便体现在 ScalaFX 的属性绑定(bind)中。并非一切都以直观的方式继承。在这种情况下
ReadOnlyBooleanWrapper
是
的子类ObservableValue[scala.Boolean, java.lang.Boolean]
但 scala.Boolean
不是 java.lang.Boolean
的子类,在 ScalaFX 中这会导致复杂化。有趣的是,转换 .asInstanceOf[ObservableValue[scala.Boolean, scala.Boolean]]
有效,尽管类型参数在编译时不匹配。
感谢您提供完整的代码示例(要点),这确实有助于澄清问题。
关于scala - 奇怪的类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21671799/