私はScalaFXプロジェクトで働いています。この時点で、私はからのクラスを適応させていますjavafx.scene.control.cell
。このパッケージでは、同じシグネチャを持つメソッドが多くのクラスで重複しています。例えばStringConverter<T> converter()
。コードの不必要な重複を避けるため (および存在型の使用方法を知るため)、次のコードを作成しました。
// Defined in scalafx.util package. All classes in scalafx use this trait
package scalafx.util
trait SFXDelegate[+D <: Object] extends AnyRef {
def delegate: D
override def toString = "[SFX]" + delegate.toString
override def equals(ref: Any): Boolean = {
ref match {
case sfxd: SFXDelegate[_] => delegate.equals(sfxd.delegate)
case _ => delegate.equals(ref)
}
}
override def hashCode = delegate.hashCode
}
// Package Object
package scalafx.scene.control
import javafx.{ util => jfxu }
import javafx.beans.{ property => jfxbp }
import javafx.scene.{ control => jfxsc }
import scalafx.Includes._
import scalafx.beans.property.ObjectProperty
import scalafx.util.SFXDelegate
import scalafx.util.StringConverter
package object cell {
type Convertable[T] = {
def converterProperty: jfxbp.ObjectProperty[jfxu.StringConverter[T]]
}
type JfxConvertableCell[T] = jfxsc.Cell[T] with Convertable[T]
trait ConvertableCell[C <: JfxConvertableCell[T], T]
extends SFXDelegate[C] {
def converter: ObjectProperty[StringConverter[T]] = ObjectProperty(delegate.converterProperty.getValue)
def converter_=(v: StringConverter[T]) {
converter() = v
}
}
}
JfxConvertableCell
言いたいタイプで
私の型は、
javafx.scene.control.Cell
of 型を返すT
メソッドが呼び出されるof 型です。converterProperty
javafx.beans.property.ObjectProperty
javafx.util.StringConverter[T]
トレイトにいる間ConvertableCell
、私の意図は、(トレイトからの) デリゲート値SFXDelegate
は type でなければならないと言うことJfxConvertableCell
です。私が作成しようとした最初のクラスは、のカウンターパートでしたCheckBoxListCell
:
package scalafx.scene.control.cell
import javafx.scene.control.{cell => jfxscc}
import scalafx.scene.control.ListCell
import scalafx.util.SFXDelegate
class CheckBoxListCell[T](override val delegate: jfxscc.CheckBoxListCell[T] = new jfxscc.CheckBoxListCell[T])
extends ListCell[T](delegate)
with ConvertableCell[jfxscc.CheckBoxListCell[T], T]
with SFXDelegate[jfxscc.CheckBoxListCell[T]] {
}
ただし、この瞬間、コンパイラから次のメッセージが表示されました。
型引数 [javafx.scene.control.cell.CheckBoxListCell[T],T] は、特性 ConvertableCell の型パラメーターの境界に準拠していません [C <: scalafx.scene.control.cell.package.JfxConvertableCell[T],T]
私は何か間違ったことを理解しましたか?CheckBoxListCell
方法がありconverterProperty
ます。委任されたクラスに適合する型として、型と存在型を使用できないでしょうか?