2008-10-07 9 views
35

Suponiendo que siempre usamos una Sun JVM (digamos, 1.5+), ¿siempre es seguro lanzar una referencia de Gráficos a Graphics2D?Java2D: ¿Siempre es seguro incluir Gráficos en Graphics2D

No he visto que cause ningún problema todavía y, a mi entender, la clase Graphics es código heredado pero los diseñadores de Java no quisieron cambiar las interfaces para las clases Swing y AWT con el fin de preservar la compatibilidad con versiones anteriores.

Respuesta

24

De acuerdo con la discusión here, que siempre es seguro para echar Graphics-Graphics2D. Sin embargo, no puedo encontrar rápidamente la declaración oficial de Sun sobre esto.

La razón es válida para emitir desde Gráficos de Graphics2D, se debe a que Sun han dicho que todos los objetos gráficos devuelto por la API de Java 1.2 o anteriormente será una subclase de Graphics2D.

Otra sugerencia here con la misma conclusión.

Gráficos objeto siempre se puede lanzar Graphics2D G2D = (Graphics2D) g;

+0

Gracias por las referencias. Voy a aceptar este aunque no cite directamente una fuente de Sun porque creo que está lo suficientemente cerca. –

+0

Como recuerdo, todos los documentos de Sun siempre muestran el reparto para las cosas de Graphics2D, así que supongo que es seguro. Si realmente quieres ser pedante, podrías usar un bloque try/catch, pero mi suposición es que si tienes las clases Graphics2D (JVM/libs lo suficientemente nuevas), estás a salvo. – MBCook

+0

El primer enlace está muerto – FDinoff

10

En el libro Filthy Rich Client por Chet Haase y Romain tipo al que están diciendo que oscilación casi siempre se utiliza un objeto Graphics2D. Las excepciones a esto son la impresión y el objeto DebugGraphics de Swing. Por lo tanto, siempre que ninguna de estas situaciones se aplique a su código, es seguro lanzarlo al Graphics2D.
Ambos autores trabajaron en Sun, así que supongo que saben de lo que están hablando.

6

El 2D Graphics Trail dice:

Emplear funciones de la API Java 2D en la aplicación, emitir el objeto Graphics pasado al método de representación de un componente a un objeto Graphics2D. Por ejemplo:

public void paint (Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 
    ... 
} 

Ésta es la fuente más "oficial" que pude encontrar. Viniendo directamente de los Tutoriales de Java de Sun, diría que esta es la forma oficialmente aprobada de hacerlo. No me habría importado exactamente si los JavaDocs deletreaban esto, aunque ...

Cuestiones relacionadas