【发布时间】:2012-11-21 07:31:21
【问题描述】:
这个问题与第一个问题有关: 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 支持“密封特征转换”,对吧? 那么我应该转向枚举,这迫使我为尺寸计算进行匹配/案例吗?或者这个问题有什么已知的解决方案吗? 是否可以在不扩展 Enumeration 或其他东西的情况下创建枚举 Value 对象?
谢谢
【问题讨论】:
-
您确实会收到“匹配并非详尽无遗...”的警告,因为该特征是密封的。