2008-10-07 22 views
35

Giả sử chúng ta luôn sử dụng Sun JVM (nói, 1,5+), có an toàn khi đúc tham chiếu Đồ họa tới Graphics2D không?Java2D: Luôn luôn an toàn khi đưa Đồ họa vào Graphics2D

Tôi chưa thấy nó gây ra bất kỳ vấn đề nào, và hiểu biết của tôi, lớp Đồ họa là mã kế thừa nhưng các nhà thiết kế Java không muốn thay đổi giao diện cho các lớp Swing và AWT để bảo đảm khả năng tương thích ngược.

Trả lời

24

Theo các cuộc thảo luận here, nó luôn an toàn để truyền từ Graphics đến Graphics2D. Tuy nhiên tôi không thể nhanh chóng tìm thấy tuyên bố chính thức của Sun về vấn đề này.

Lý do nó là hợp lệ để đúc từ Graphics để Graphics2D, là bởi vì Sun đã nói rằng tất cả các đối tượng đồ họa trả về bởi các API trong Java 1.2 hoặc trên sẽ là một lớp con của Graphics2D.

Một gợi ý khác here với cùng một kết luận.

Đối tượng đồ họa luôn có thể được đúc Graphics2D g2d = (Graphics2D) g;

+0

Cảm ơn bạn đã tham khảo. Tôi sẽ chấp nhận điều này mặc dù nó không trực tiếp trích dẫn nguồn Sun bởi vì tôi nghĩ nó đủ gần. –

+0

Như tôi nhớ tất cả các tài liệu Sun luôn hiển thị các diễn viên cho các công cụ Graphics2D, vì vậy tôi cho rằng nó an toàn. Nếu bạn thực sự muốn là pedantic, bạn có thể sử dụng một khối try/catch, nhưng tôi đoán là nếu bạn có các lớp Graphics2D (JVM/libs mới đủ), bạn an toàn. – MBCook

+0

Liên kết đầu tiên đã chết – FDinoff

10

Trong sách Filthy Rich Client bởi Chet Haase và Romain Guy, họ nói rằng Swing hầu như luôn sử dụng đối tượng Graphics2D. Ngoại lệ từ đây là in ấn và đối tượng DebugGraphics của Swing. Vì vậy, miễn là không có trường hợp nào trong số các tình huống này áp dụng cho mã của bạn, bạn có thể an toàn để truyền tới Graphics2D.
Cả hai tác giả đều làm việc ở Sun, vì vậy tôi cho rằng họ biết họ đang nói về cái gì.

6

Các 2D Graphics Trail nói:

Để sử dụng tính năng Java 2D API trong ứng dụng, đúc các tượng Graphics được truyền vào phương pháp vẽ của một thành phần cho một đối tượng Graphics2D. Ví dụ:

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

Đây là "chính thức" nguồn nhất mà tôi có thể tìm thấy. Đến ngay từ Hướng dẫn Java của Sun, tôi muốn nói rằng đây là cách chính thức bị xử phạt. Tôi sẽ không có chính xác tâm nếu JavaDocs đánh vần này ra, mặc dù ...

Các vấn đề liên quan