奇怪的类型不匹配错误

米特林格

我有一个表列errorFixed类型的TableColumn[Error, Boolean]内部TableView[Error]我的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 根据文档的超类

如果我自己使用.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中的属性绑定中。并非所有内容都以直观的方式继承。在这种情况下

ReadOnlyBooleanWrapper 

是的子类

ObservableValue[scala.Boolean, java.lang.Boolean]

scala.Boolean不是java.lang.Boolean内部的子类,在ScalaFX中这会导致复杂化。有趣的是.asInstanceOf[ObservableValue[scala.Boolean, scala.Boolean]],尽管类型参数在编译时不匹配,但转换仍然有效。

感谢您提供完整的代码示例(要点),这确实有助于阐明问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章