2009-05-31 69 views

回答

276

首選技術是使用模式匹配。這可以讓你優雅的處理這些問題的價值不是給定類型的情況:

g match { 
    case g2: Graphics2D => g2 
    case _ => throw new ClassCastException 
} 

此塊複製asInstanceOf[Graphics2D]方法的語義,但具有更大的靈活性。例如,您可以爲各種類型提供不同的分支,可以同時有效地執行多個條件轉換。最後,你並不需要真的需要拋出一個異常的全部區域,你也可以返回null(或最好是None),或者你可以進入一些後備分支,其工作沒有Graphics2D

總之,這是真的要走的路。它的語法體積比asInstanceOf稍大,但增加的靈活性幾乎總是值得的。

215
g.asInstanceOf[Graphics2D]; 
+34

一旦我習慣了Scala,我學會了不使用`asInstanceOf`,因爲它違背了靜態類型系統的目的,並且感覺很糟糕。 – 2011-02-26 22:51:43

+24

不幸的是,這是使用Swing時的常見操作。對於自定義繪畫操作,您需要重寫'public void paintComponent(Graphics g)'方法。 Graphics參數實際上是一個Graphics2D實例,但需要強制轉換。模式匹配版本可能比保證更冗長。請記住:絕對避免混淆的混亂和冗長! – hohonuuli 2011-10-16 06:19:28