Java2D:把graphics转换成Graphics2D总是安全的

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

我还没有看到它导致任何问题,据我了解,Graphics类是遗留代码,但Javadevise人员不想更改Swing和AWT类的接口,以保持向后兼容性。

根据这里的讨论, GraphicsGraphics2D总是安全的 。 不过,我无法迅速findSun官方的声明。

从Graphics到Graphics2D的转换是有效的,因为Sun已经说过,Java 1.2或更高版本的API返回的所有Graphics对象都是Graphics2D的子类。

另一个提示与此相同的结论。

Graphics对象总是可以被强制转换Graphics2D g2d =(Graphics2D)g;

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

2Dgraphics追踪说:

要在应用程序中使用Java 2D APIfunction,请将传递给组件的呈现方法的Graphics对象转换为Graphics2D对象。 例如:

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

这是我能find的最“官方”的来源。 直接从Sun的Java教程中,我会说这是官方批准的做法。 但是,如果JavaDocs拼写出来的话,我不会完全怀念,尽pipe…