我在类型安全的构建器模式中使用幻像类型来确保方法只被调用一次,如以下代码示例所示
sealed trait TBoolean
sealed trait TTrue extends TBoolean
sealed trait TFalse extends TBoolean
class Builder[MethodCalled <: TBoolean] private() {
def foo()(implicit ev: MethodCalled =:= TFalse): Builder[TTrue] = {
new Builder[TTrue]
}
}
object Builder {
def apply() = new Builder[TFalse]()
}
Builder().foo().foo()
不能按要求工作,但是我想将错误消息设置为用户可读的内容。目前消息是
此行有多个标记 - 方法 foo 的参数不足:(implicit ev: =:=[W.TTrue,W.TFalse])W.Builder[W.TTrue]。未指定值参数 ev。- 无法证明 W.TTrue =:= W.TFalse。- 无法证明 W.TTrue =:= W.TFalse。