我正在使用 ScalaFX 和 JavaFX,并拥有以下代码:
import scalafx.Includes._
class Type1(anInt: Int, ...)
class Type2(aString: String, ...)
class ListItem[T](internalValue:T, ...)
object Worker
{
val list1 = FXCollections.observableArrayList[ListItem[Type1]]()
val list2 = FXCollections.observableArrayList[ListItem[Type2]]()
def workWithList(list:ObservableList[ListItemType]) {
list.foreach(i => workWithItem(i))
}
def workWithItem(item:ListItem) {
item match {
case i:ListItem[Type1] => do something
case i:ListItem[Type2] => do something else
}
}
workWithList(list1)
workWithList(list2)
}
我的问题是这段代码无法编译;它说我不能将 ObservableList[ListItem[Type1]] 用于该workWithList
方法,该方法需要 ObservableList[ListItem]。
正如我一直在玩的那样,这段代码的一些变体表示存在未经检查的警告,并且由于类型擦除,模式匹配将不起作用。
理想情况下:
- 只有一个列表可以保存 ListItem[Type1] 和 ListItem[Type2] 类型的对象
- 我可以在使用项目时进行模式匹配,以根据正在使用的项目类型来做不同的事情
workWithItem
可以与任何一种类型的项目一起使用。在我当前的代码中,我不得不将签名更改为workWithItem(item:ListItem[_])
然后执行workWithItem(someItem.asInstanceOf[ListItem[_]])
. 可能不是正确的做法!
谢谢!