常に Sun JVM (たとえば、1.5+) を使用すると仮定すると、Graphics 参照を Graphics2D にキャストすることは常に安全ですか?
私はそれが問題を引き起こすのを見たことがありません。私の理解では、Graphics クラスはレガシー コードですが、Java 設計者は下位互換性を維持するために Swing および AWT クラスのインターフェイスを変更したくありませんでした。
ここでの議論によると、 from からtoにキャストするGraphics
Graphics2D
ことは常に安全です。ただし、これに関する Sun の公式声明をすぐに見つけることができません。
Graphics から Graphics2D へのキャストが有効な理由は、Java 1.2 以降の API によって返されるすべての Graphics オブジェクトが Graphics2D のサブクラスになると Sun が述べているためです。
ここに同じ結論の別のヒントがあります。
Graphics オブジェクトはいつでもキャストできます Graphics2D g2d = (Graphics2D)g;
Chet Haase と Romain Guy による著書Filthy Rich Clientでは、Swing はほとんど常にオブジェクトを使用すると述べていGraphics2D
ます。例外は、printing と Swing のDebugGraphics
オブジェクトです。したがって、これらの状況がコードに当てはまらない限り、キャストしても安全Graphics2D
です。
著者はどちらも Sun で働いていたので、彼らが何について話しているのか知っていると思います。
2D Graphics Trailには次のように書かれています。
アプリケーションで Java 2D API 機能を使用するには、コンポーネントのレンダリング メソッドに渡された Graphics オブジェクトを Graphics2D オブジェクトにキャストします。例えば:
public void paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
...
}
これは私が見つけることができる最も「公式」な情報源です。Sun の Java チュートリアルから直接引用すると、これが公式に認可された方法であると言えます。JavaDocsがこれを詳しく説明していたとしても、私はまったく気にしませんでした...