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

Out*_*mer 36 java java-2d

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

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

Jor*_*ira 26

根据讨论这里,它始终是安全的,从投GraphicsGraphics2D.但是,我无法快速找到关于此的官方Sun声明.

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

这里的另一个暗示有相同的结论.

Graphics Object总是可以转换为Graphics2D g2d =(Graphics2D)g;


Rol*_*der 10

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


小智 6

2D图形小道说:

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

public void paint (Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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