我使用幻象類型的類型安全的構建者模式,以確保方法被調用一次如下面的代碼樣本中類型安全生成器:如何設置編譯器錯誤消息
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:(隱式EV:=:= [W.TTrue,W.TFalse])W.Builder [W.TTrue ]。未指定的值參數ev。 - 無法證明W.TTrue =:= W.TFalse。 - 無法證明W.TTrue =:= W.TFalse。
可能會謹慎地稱呼'NotCalled'特性而不是'Called'。否則,偉大的職位+1。 –
它代表已被調用的方法,因此不適合再次調用。這個名字似乎適合我。 –
或使用類型別名'type NotCalled [A] = Called [A,TFalse]' –