Dada una variable con tipo Graphics
, ¿cómo la echo a Graphics2D
en Scala?¿Cómo echo una variable en Scala?
Respuesta
La técnica preferida es utilizar la coincidencia de patrones. Esto le permite controlar correctamente el caso de que el valor en cuestión es no del tipo dado:
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
Este bloque se 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 moldes condicionales al mismo tiempo. Finalmente, no necesita realmente necesita lanzar una excepción en el área de catch-all, también puede devolver null
(o preferiblemente, None
), o puede ingresar alguna rama de reserva que funciona sin Graphics2D
.
En resumen, este es realmente el camino a seguir. Es un poco más sintácticamente voluminoso que asInstanceOf
, pero la flexibilidad añadida casi siempre vale la pena.
g.asInstanceOf[Graphics2D];
Una vez que me acostumbré a Scala, aprendí a no utilizar 'asInstanceOf', ya que se frustra el propósito de tener un sistema de tipo estático y se siente asqueroso. –
Desafortunadamente, esta es una operación común cuando se usa Swing. Para las operaciones de pintura personalizadas, debe anular el método 'public void paintComponent (Graphics g)'. El parámetro Graphics es en realidad una instancia de Graphics2D, pero se necesita un molde. La versión de coincidencia de patrones es probablemente más detallada que garantizada. Recuerde: ¡evite severamente la hipervergencia y la prolijidad ofuscantes! – hohonuuli
@hohonuuli Creo que el yeso está bien en ese caso específico, pero si usa los componentes 'scala-swing', el parámetro de paintComponent ya es Graphics2D, por lo que no es necesario el molde –
- 1. ¿Cómo echo una suma de una variable y un número?
- 2. Cómo echo variable de ruta de clase en un archivo
- 3. SSI #set variable y #echo issue
- 4. Cómo pasar una o ninguna variable arg en scala?
- 5. ¿Cómo echo el id a una carroza?
- 6. ¿Por qué estoy recibiendo "Echo está en" al intentar imprimir una variable en lotes
- 7. ¿Es posible definir una variable de constructor local en Scala?
- 8. ¿Puedo alinear variables en una cadena con echo y bash?
- 9. cómo estilo php echo output
- 10. Cómo echo en PHP, etiquetas html
- 11. ¿Cómo pongo basename en una variable?
- 12. Cerrando la variable de bucle en Scala
- 13. Cómo hacer yo echo una "cadena" en una "opción <string>"
- 14. Debe anular la variable val en scala
- 15. Echo an $ _POST en PHP
- 16. En PHP, ¿por qué echo no se implementó como una función? (no echo vs. printf)
- 17. Cómo mostrar una variable php en html
- 18. Echo un número muy grande
- 19. @ echo off en DOS (CMD)
- 20. cuando intento echo $ 10 Conviene convierte echo $ 1 0
- 21. ¿Cómo echo una lista <T> efectivamente?
- 22. ¿Cómo inserto una variable en una matriz de PHP?
- 23. Vim hace una pausa si echo en el archivo .vimrc
- 24. Cómo hacer que fputcsv "echo" los datos
- 25. Diferencia entre "echo 'hello'; ls" vs "echo 'hello' && ls"?
- 26. PHP Echo Line Breaks
- 27. Scala asignación múltiple a variable existente
- 28. ¿Cómo echo desde System.Web.HttpPostedFileBase a System.Web.HttpPostedFile?
- 29. ¿Cómo se empareja el patrón con una variable en mayúscula?
- 30. MSBuild echo task?
+1 porque es interesante, pero demasiado para este escenario. ¿No es así? –
¿Qué pasa si yo ya emparejado, pero perdió la referencia al valor de conversión:
base match { case MyConcrete(value) => base.asInstanceOf[MyConcrete].something(value) }
, ¿hay alguna forma de obtener 'base' para MyConcrete incluso si desea extraer el "valor" explotando la llamada 'de aplicación' realizada por "caso MyConcrete (valor)"? – ithkuilIntenta esto: 'base match {case base @ MyConcrete (value) => base.something (value)}' Obviamente, shadowing 'base' es opcional. Podrías usar fácilmente un nombre de variable diferente. –