38

常に Sun JVM (たとえば、1.5+) を使用すると仮定すると、Graphics 参照を Graphics2D にキャストすることは常に安全ですか?

私はそれが問題を引き起こすのを見たことがありません。私の理解では、Graphics クラスはレガシー コードですが、Java 設計者は下位互換性を維持するために Swing および AWT クラスのインターフェイスを変更したくありませんでした。

4

3 に答える 3

26

ここでの議論によると、 from からtoにキャストするGraphicsGraphics2Dことは常に安全です。ただし、これに関する Sun の公式声明をすぐに見つけることができません。

Graphics から Graphics2D へのキャストが有効な理由は、Java 1.2 以降の API によって返されるすべての Graphics オブジェクトが Graphics2D のサブクラスになると Sun が述べているためです。

ここに同じ結論の別のヒントがあります。

Graphics オブジェクトはいつでもキャストできます Graphics2D g2d = (Graphics2D)g;

于 2008-10-07T17:00:08.423 に答える
11

Chet Haase と Romain Guy による著書Filthy Rich Clientでは、Swing はほとんど常にオブジェクトを使用すると述べていGraphics2Dます。例外は、printing と Swing のDebugGraphicsオブジェクトです。したがって、これらの状況がコードに当てはまらない限り、キャストしても安全Graphics2Dです。
著者はどちらも Sun で働いていたので、彼らが何について話しているのか知っていると思います。

于 2008-10-07T20:23:48.840 に答える
7

2D Graphics Trailには次のように書かれています。

アプリケーションで Java 2D API 機能を使用するには、コンポーネントのレンダリング メソッドに渡された Graphics オブジェクトを Graphics2D オブジェクトにキャストします。例えば:

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

これは私が見つけることができる最も「公式」な情報源です。Sun の Java チュートリアルから直接引用すると、これが公式に認可された方法であると言えます。JavaDocsがこれを詳しく説明していたとしても、私はまったく気にしませんでした...

于 2009-09-01T20:25:47.693 に答える