Java2D:把graphics转换成Graphics2D总是安全的
假设我们总是使用Sun JVM(比如1.5+),将Graphics引用转换为Graphics2D总是安全的吗?
我还没有看到它导致任何问题,据我了解,Graphics类是遗留代码,但Javadevise人员不想更改Swing和AWT类的接口,以保持向后兼容性。
根据这里的讨论, 从Graphics
到Graphics2D
总是安全的 。 不过,我无法迅速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…