renault - ¿Cómo puedo lanzar una variable en Scala?
scala vs java (2)
Dada una variable con el tipo Graphics
, ¿cómo lo Graphics2D
en Graphics2D
en Scala?
La técnica preferida es utilizar la coincidencia de patrones. Esto le permite manejar con gracia el caso de que el valor en cuestión no sea del tipo dado:
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
Este bloque replica la semántica del método asInstanceOf[Graphics2D]
, pero con mayor flexibilidad. Por ejemplo, podría proporcionar diferentes ramas para varios tipos, realizando de manera efectiva múltiples conversiones condicionales al mismo tiempo. Finalmente, no necesita lanzar una excepción en el área de alcance general, también podría devolver null
(o preferiblemente, None
), o podría ingresar alguna rama alternativa que funcione sin Graphics2D
.
En resumen, este es realmente el camino a seguir. Es un poco más sintácticamente voluminoso que asInstanceOf
, pero la flexibilidad adicional casi siempre vale la pena.
g.asInstanceOf[Graphics2D];