枚举 - >具有“价值”的密封特性?

时间:2012-12-03 19:05:54

标签: scala salat

这个问题与第一个问题有关: Iteration over a sealed 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支持&#34;密封特征转换&#34;对? 那么我应该转向Enumeration,它迫使我为尺寸计算做一个匹配/案例?或者这个问题是否有任何已知的解决方案? 是否可以在不扩展Enumeration的情况下创建枚举Value对象?

由于

1 个答案:

答案 0 :(得分:3)

Salat开发人员。

Salat使用@Salat注释支持案例对象层次结构。 (我从不建议在Scala中使用枚举 - 它们很可怕。)

现在......使用案例对象作为地图的关键实际上不是mongo支持的东西。 mongo中的所有地图键都需要是字符串。

那么你想要坚持的地图是什么样的呢?