Подтвердить что ты не робот

Java2D: всегда ли безопасно использовать графику в Graphics2D

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

2D Graphics Trail говорит:

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

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

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