Java2D:将Graphics转换为Graphics2D总是安全的

时间:2008-10-07 16:56:22

标签: java java-2d

假设我们总是使用Sun JVM(比如1.5+),那么将Graphics引用转换为Graphics2D总是安全的吗?

我还没有看到它导致任何问题,据我所知,Graphics类是遗留代码,但Java设计者不想更改Swing和AWT类的接口以保持向后兼容性。 / p>

3 个答案:

答案 0 :(得分:26)

根据讨论here始终可以安全地从Graphics投射到Graphics2D 。但是,我无法快速找到Sun的正式声明。

  

从中投射有效的原因   图形到Graphics2D,是因为Sun   已经说过所有Graphics对象了   由Java 1.2或Java中的API返回   上面将是一个子类   的Graphics2D。

另一个暗示here有相同的结论。

  

始终可以投射图形对象   Graphics2D g2d =(Graphics2D)g;

答案 1 :(得分:10)

在Chet Haase和Romain Guy的书Filthy Rich Client中,他们说Swing几乎总是使用Graphics2D个对象。例外情况是打印和Swing的DebugGraphics对象。因此,只要这些情况都不适用于您的代码,就可以安全地转换为Graphics2D 两位作者都在Sun工作,所以我认为他们知道他们在谈论什么。

答案 2 :(得分:6)

2D Graphics Trail说:

  

要在应用程序中使用Java 2D API功能,请将传递到组件渲染方法的Graphics对象强制转换为Graphics2D对象。例如:

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

这是我能找到的最“官方”的来源。直接来自Sun的Java教程,我会说这是官方认可的方式。如果JavaDocs拼写出来,我不会完全明白,但是......