web-dev-qa-db-fra.com

Comment jette-t-on une variable dans Scala?

Étant donné une variable de type Graphics, comment puis-je le transtyper en Graphics2D à Scala?

194
Eugene Yokota

La technique préférée consiste à utiliser un filtrage par motif. Cela vous permet de gérer avec élégance le cas où la valeur en question est et non du type donné:

g match {
  case g2: Graphics2D => g2
  case _ => throw new ClassCastException
}

Ce bloc reproduit la sémantique de la asInstanceOf[Graphics2D] méthode, mais avec plus de flexibilité. Par exemple, vous pouvez fournir différentes branches pour différents types, réalisant efficacement plusieurs distributions conditionnelles en même temps. Enfin, vous n'avez pas vraiment à lancer une exception dans la zone fourre-tout, vous pouvez aussi retourner null (ou de préférence , None), ou vous pouvez entrer une branche de secours qui fonctionne sans Graphics2D.

En bref, c'est vraiment la voie à suivre. C'est un peu plus volumineux syntaxiquement que asInstanceOf, mais la flexibilité supplémentaire en vaut presque toujours la peine.

279
Daniel Spiewak
g.asInstanceOf[Graphics2D];
222
Eugene Yokota