Java2D: всегда ли безопасно переводить Graphics в Graphics2D? - PullRequest
36 голосов
/ 07 октября 2008

Предполагая, что мы всегда используем Sun JVM (скажем, 1.5+), всегда ли безопасно приводить ссылку Graphics на Graphics2D?

Я еще не видел, чтобы это вызывало какие-либо проблемы, и, насколько я понимаю, класс Graphics является устаревшим кодом, но разработчики Java не хотели менять интерфейсы для классов Swing и AWT, чтобы сохранить обратную совместимость.

Ответы [ 3 ]

26 голосов
/ 07 октября 2008

Согласно обсуждению здесь , его всегда безопасно разыграть от Graphics до Graphics2D. Однако я не могу быстро найти официальное заявление Sun по этому поводу.

Причина, по которой он действителен Графика к Graphics2D, потому что Солнце сказал, что все графические объекты возвращается API в Java 1.2 или выше будет подкласс Graphics2D.

Еще один намек здесь с тем же выводом.

Графический объект всегда можно привести Graphics2D g2d = (Graphics2D) g;

10 голосов
/ 08 октября 2008

В книге Filthy Rich Client Чета Хааса и Ромена Гая говорится, что Swing почти всегда использует объект Graphics2D. Исключениями из этого являются печать и объект Swing DebugGraphics. Поэтому, если ни одна из этих ситуаций не применима к вашему коду, можно безопасно преобразовать в Graphics2D.
Оба автора работали в Sun, поэтому я предполагаю, что они знают, о чем говорят.

6 голосов
/ 02 сентября 2009

Графический след 2D говорит:

Чтобы использовать функции Java 2D API в приложении, приведите объект Graphics, переданный в метод рендеринга компонента, к объекту Graphics2D. Например:

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

Это самый "официальный" источник, который я мог найти. Исходя из руководств Sun по Java, я бы сказал, что это официально санкционированный способ сделать это. Я бы точно не возражал, если бы в JavaDocs это прописывалось, хотя ...

...