Graphics
Wie kann ich eine Variable mit Typ Graphics2D
in Scala umwandeln?
Die bevorzugte Technik ist die Verwendung des Mustervergleichs. Auf diese Weise können Sie den Fall, dass der betreffende Wert nicht vom angegebenen Typ ist, ordnungsgemäß behandeln :
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
Dieser Block repliziert die Semantik der asInstanceOf[Graphics2D]
Methode, jedoch mit größerer Flexibilität. Sie können beispielsweise verschiedene Zweige für verschiedene Typen bereitstellen und so mehrere bedingte Casts gleichzeitig ausführen. Schließlich müssen Sie nicht wirklich brauchen eine Ausnahme in der catch-all - Bereich zu werfen, können Sie auch zurückkehren null
(oder bevorzugt None
), oder Sie könnten einige Ausweich Zweig, der ohne funktioniert eingeben Graphics2D
.
Kurz gesagt, das ist wirklich der richtige Weg. Es ist etwas syntaktisch sperriger als asInstanceOf
, aber die zusätzliche Flexibilität lohnt sich fast immer.
base match { case base @ MyConcrete(value) => base.something(value) }
Abschattenbase
ist natürlich optional. Sie können genauso gut einen anderen Variablennamen verwenden.val gResult = g match { case g2: Graphics2D => g2 case _ => throw new ClassCastException }
quelle
asInstanceOf
gewöhnt hatte , lernte ich, es nicht zu benutzen , da es den Zweck eines statischen Typsystems zunichte macht und sich glücklich anfühlt.scala-swing
Komponenten verwenden, ist der Parameter von paintComponent bereits Graphics2D, so dass keine Besetzung erforderlich ist