トピックが正しいかどうかわかりません。問題を説明しようと思います。私には共通のフィールド特性が 1 つあります。StringField および IntField は、このクラスを拡張します。
trait BaseField[T] {
def name = "field"
var owner : FieldContainer
var value : T
def set(value : T) {
this.value = value
this.owner.fields.put(name, this)
}
}
class StringField extends BaseField[String]
class IntField extends BaseField[Int]
FieldContainer クラスを実装するにはどうすればよいですか? 私が欲しいのは、後で FieldTypes を一致させることです:
val fieldContainer = {...init code here...}
fieldContainer.fields foreach {
field -> {
field match {
case f: StringField => println("String")
case f: IntField => println("Int")
case _ => println("Unknown")
}
}
}
これは私のFieldContainerです(これまでのところ)
trait FieldContainer {
private metaFields : HashMap[String, Any] = new HashMap[String, Any]
def fields : HashMap[String, Any] = this.metaFields
}
そして、私はそれをそのように使用します:
class Pizza extends FieldContainer {
object name extends StringField(this) {
override def name = "pizza_name"
}
object pieces extends IntField(this) {
override def name = "pieces_count"
}
}