1

这个问题与第一个问题有关: Iteration over a seal trait in 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 支持“密封特征转换”,对吗?那么我应该转向枚举,这会迫使我为维度计算进行匹配/案例吗?或者这个问题有什么已知的解决方案吗?是否可以在不扩展 Enumeration 或其他东西的情况下创建枚举 Value 对象?

谢谢

4

1 回答 1

3

萨拉特开发商在这里。

Salat 使用@Salat注释支持案例对象层次结构。(我从不推荐在 Scala 中使用枚举——它们太可怕了。)

现在......使用 case 对象作为地图的键实际上不是 mongo 支持的。mongo 中的所有映射键都需要是字符串。

那么你试图坚持的这张地图是什么样的呢?

于 2012-12-03T21:46:18.443 回答