枚举 -> 带有"Value"的密封性状 ?



这个问题与第一个问题有关:迭代 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
  )
}

这目前工作正常。问题是我需要能够使用我的RessizeImageKey作为地图的键,该地图将与Salat一起存储在MongoDB中。

我不认为萨拉特支持"密封性状转换"吧?那么我应该转移到枚举,这迫使我为维度计算进行匹配/案例?或者这个问题有什么已知的解决方案吗?是否可以在不扩展枚举或其他内容的情况下创建枚举值对象?

谢谢

Salat 开发者在这里。

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

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

那么,您要保留的这张地图是什么样子的呢?

相关内容

  • 没有找到相关文章

最新更新