私は 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)
}
私の問題は、このコードがコンパイルされないことです。workWithList
ObservableList[ListItem[Type1]]を期待するメソッドにObservableList[ListItem[Type1]] を使用できないと書かれています。
これで遊んでいると、このコードのいくつかのバリエーションは、チェックされていない警告があり、型消去のためにパターン マッチングが機能しないことを示しています。
理想的には:
- タイプ ListItem[Type1] および ListItem[Type2] のオブジェクトを保持できるリストは 1 つだけです。
- どのような種類のアイテムを扱うかによって異なることを行うために、アイテムを扱うときにパターン マッチングを行うことができます。
workWithItem
どちらのタイプのアイテムでも機能します。私の現在のコードでは、署名を に変更してから実行するworkWithItem(item:ListItem[_])
必要がありworkWithItem(someItem.asInstanceOf[ListItem[_]])
ました。おそらく正しいことではありません!
ありがとう!