1

この質問は最初の質問に関連しています: Scalaの封印されたトレイトの反復?

私は次の封印された特性を持っています

/**
 * @author Sebastien Lorber (<i>lorber.sebastien@gmail.com</i>)
 * Date: 02/12/12 - Time: 17:49
 */
sealed trait ResizedImageKey {

  /**
   * Get the dimensions to use on the resized image associated with this key
   */
  def getDimension(originalDimension: Dimension): Dimension

}

object ResizedImageKey {
  val ALL_KEYS: List[ResizedImageKey] = List(Large,Medium,Small,X2)
}

case class Dimension(width: Int,  height: Int)

case object Large extends ResizedImageKey {
  def getDimension(originalDimension: Dimension) = Dimension(1000,1000)
}

case object Medium extends ResizedImageKey{
  def getDimension(originalDimension: Dimension) = Dimension(500,500)
}

case object Small extends ResizedImageKey{
  def getDimension(originalDimension: Dimension) = Dimension(100,100)
}

case object X2 extends ResizedImageKey{
  def getDimension(originalDimension: Dimension) = Dimension(
    width = originalDimension.width * 2,
    height = originalDimension.height * 2
  )
}

これは今のところ正常に機能します。問題は、ResizedImageKeyをSalatとともにMongoDBに保存されるマップのキーとして使用できるようにする必要があるということです。

Salatは「封印された特性変換」をサポートしているとは思いませんか?それで、私は列挙に移動する必要があります、それは私に次元計算のためにマッチ/ケースをすることを強制しますか?または、この問題に対する既知の解決策はありますか?列挙などを拡張せずに列挙値オブジェクトを作成することは可能ですか?

ありがとう

4

1 に答える 1

3

ここでサラッ開発者。

Salatは、@Salatアノテーションを使用してケースオブジェクト階層をサポートします。(私はScalaで列挙型を使用することを決してお勧めしません-それらは恐ろしいです。)

さて...マップのキーとしてケースオブジェクトを使用することは、実際にはmongoがサポートするものではありません。mongoのすべてのマップキーは文字列である必要があります。

では、永続化しようとしているこのマップはどのように見えますか?

于 2012-12-03T21:46:18.443 に答える