38

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

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

4

3 回答 3

26

根据这里的讨论,从to 转换总是安全的GraphicsGraphics2D。但是,我无法快速找到 Sun 的官方声明。

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

这里的另一个提示具有相同的结论。

图形对象总是可以转换 Graphics2D g2d = (Graphics2D)g;

于 2008-10-07T17:00:08.423 回答
11

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

于 2008-10-07T20:23:48.840 回答
7

2D 图形轨迹说:

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

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

这是我能找到的最“官方”的来源。直接来自 Sun 的 Java 教程,我想说这是官方认可的做法。不过,如果 JavaDocs 明确说明了这一点,我不会完全介意......

于 2009-09-01T20:25:47.693 回答