我正在编写一个简单的类Char
,用于在Oracle的BooleanChar
中包含一个布尔值(因为Oracle is stupid or, TL;DR Oracle SQL does not support booleans)。
所以,我有模型类(将使用Boolean
)。我还有投影类,或映射到REST等的对象,它们将使用val first: String = "Fred"
val last: String = "Flintstone"
val active: BooleanChar = BooleanChar(true)
val m = UserModel(first, last, active)
... // stuff happens and now I want to project it over REST
val u = User(m.first, m.last, m.active)
。
示例(人为而且简单但又重要):
m.active
现在,诀窍是,我希望BooleanChar
(模型上的Boolean
或投影上的case class User(first: String, last: String, active: Boolean)
)的映射完全透明。因此,如果这两个类是可以互换的,那么上面的工作非常好,即使:
a: BooleanChar = b: Boolean
但这一切都取决于两种类型对象之间的神奇映射,例如val u = User(first, last, active.map(_.state)) // BooleanChar has a `Boolean` `state`
。否则,我必须在整个地方做到这一点,这很难看:
{
"data": {
"children": [{
"data": {
"domain": "some.url.com"
},
{
"data": {
"domain": "another.url.com"
}
}
}]
}
}
答案 0 :(得分:3)
基本上你想要的是
class BooleanCharToBool(bc: BooleanChar) {
def toBool = bc.map(_.state)
}
implicit def booleanCharToBool(bc: BooleanChar) = new BooleanCharToBool(bc)
一旦将其导入到您想要进行转换的范围(构造User
的位置),编译器会注意到有一种方法可以隐式地将BooleanChar转换为布尔值,而您能够做到
val u = User(first, last, active)