如果Graphics2D
中还包含所有Graphics
,为什么它们不会默认为Graphics2D
?
我似乎几乎总是在我的所有绘画覆盖中投射/创建一个Graphics2D
对象。
@Override
public void paintComponent(Graphics paramGraphics){
super.paintComponent(paramGraphics);
Graphics2D g = (Graphics2D) paramGraphics.create();
// RenderingHints etc.
}
答案 0 :(得分:3)
仅支持Graphics
的AWT兼容性。 Swing的组件扩展java.awt.Component
,其getGraphics
方法只返回Graphics
个对象。在创建Swing时(Java 1.1 / 1.2),Java并不知道协方差。即使返回类型不是方法签名的一部分,也不允许使用具有不同(原始子类)返回类型的override方法。使用今天的语言功能,这是允许的,可能会以不同的方式完成,即返回类型将更改为Graphics2D
。那时唯一的方法就是添加一个新方法(如getGraphics2D
)或完全破坏与AWT的轻松互操作性。