Почему Swing по умолчанию использует «Графика», а не «Графика2D»? - PullRequest
3 голосов
/ 26 января 2012

Почему бы им не использовать значение по умолчанию Graphics2D, если все Graphics также включено в Graphics2D?
Я, кажется, почти всегда применяю / создаю Graphics2D объект во всех моих переопределениях рисования.*

@Override
public void paintComponent(Graphics paramGraphics){
   super.paintComponent(paramGraphics);
   Graphics2D g = (Graphics2D) paramGraphics.create();
   // RenderingHints etc.
 }

1 Ответ

3 голосов
/ 26 января 2012

Совместимость с AWT, который поддерживает только Graphics. Компоненты Swing расширяют java.awt.Component, в котором есть метод getGraphics, который возвращает только объект Graphics. На момент создания Swing (Java 1.1 / 1.2) Java не знала ковариации. Переопределенный метод с другим (подклассом оригинального) возвращаемого типа не допускался, даже если возвращаемый тип не является частью сигнатуры метода. С сегодняшней функцией языка это разрешено и, вероятно, будет сделано по-другому, то есть тип возврата будет изменен на Graphics2D. В то время единственным способом было бы либо добавить новый метод (например, getGraphics2D), либо полностью нарушить легкую совместимость с AWT.

...