0

トピックが正しいかどうかわかりません。問題を説明しようと思います。私には共通のフィールド特性が 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"
  }
}
4

1 に答える 1