Validierungen in Wertklassen

SIP-15 bedeutet, dass Wertklassen verwendet werden können, um beispielsweise neue numerische Klassen wie positive Zahlen zu definieren. Ist es möglich, eine solche Einschränkung so zu codieren, dass der zugrunde liegende Wert> 0 ist, wenn kein Konstruktor vorhanden ist, ohne dass eine separate Methode zum Validieren der Einschränkung aufgerufen werden muss (dh, das Erstellen einer gültigen Instanz einer solchen Klasse ist succint)?

Wenn Wertklassen den Begriff Konstruktor hatten, dann könnte das ein Ort sein, an dem solche Überprüfungen wie unten möglich sind, der jedoch nicht unterstützt wird (dh Code unten wird nicht kompiliert).

implicit class Volatility(val underlying: Double) extends AnyVal {
  require(!underlying.isNaN && !underlying.isInfinite && underlying > 0, "volatility must be a positive finite number")
  override def toString = s"Volatility($underlying)"
}

Volatility(-1.0) //should ideally fail

Antworten auf die Frage(4)

Ihre Antwort auf die Frage