BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D) image.getGraphics(); // 此處強轉
image.getGraphics() 返回類型是 Graphics(父類)。Graphics2D 是 Graphics 的子類,提供了更豐富的 API(抗鋸齒、幾何變換、描邊控制等)。java.lang.Object
└── java.awt.Graphics
└── java.awt.Graphics2D ← 實際返回的運行時類型
Graphics g = image.getGraphics();
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
// 安全啟用高級特性
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
} else {
// 理論上不會發生,但防禦性編程
throw new IllegalStateException("當前圖形環境不支持 Graphics2D");
}
為了保持向後兼容性。早期 AWT 只有 Graphics,後來 Java 2D 引入 Graphics2D 時,為不破壞現有代碼,保留了原方法簽名。