假设我们总是使用Sun JVM(比如1.5+),那么将Graphics引用转换为Graphics2D总是安全的吗?
我还没有看到它导致任何问题,据我所知,Graphics类是遗留代码,但Java设计者不希望更改Swing和AWT类的接口以保持向后兼容性.
根据讨论这里,它始终是安全的,从投Graphics
来Graphics2D
.但是,我无法快速找到关于此的官方Sun声明.
从Graphics转换为Graphics2D是有效的原因是因为Sun已经说过Java 1.2或更高版本中API返回的所有Graphics对象都是Graphics2D的子类.
这里的另一个暗示有相同的结论.
Graphics Object总是可以转换为Graphics2D g2d =(Graphics2D)g;
在Chet Haase和Romain Guy 的书Filthy Rich Client中,他们说Swing几乎总是使用一个Graphics2D
对象.例外情况是打印和Swing的DebugGraphics
对象.因此,只要这些情况都不适用于您的代码,就可以安全地进行转换Graphics2D
.
两位作者都在Sun工作,所以我认为他们知道他们在谈论什么.
在2D图形小道说:
要在应用程序中使用Java 2D API功能,请将传递到组件的呈现方法中的Graphics对象转换为Graphics2D对象.例如:
public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; ... }
这是我能找到的最"官方"的来源.直接来自Sun的Java教程,我会说这是官方认可的方式.如果JavaDocs拼写出来,我不会完全明白,不过......