給定一個類型爲Graphics
的變量,我該如何將它轉換爲Scala中的Graphics2D
?如何在Scala中投射變量?
189
A
回答
276
首選技術是使用模式匹配。這可以讓你優雅的處理這些問題的價值不是給定類型的情況:
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
此塊複製asInstanceOf[Graphics2D]
方法的語義,但具有更大的靈活性。例如,您可以爲各種類型提供不同的分支,可以同時有效地執行多個條件轉換。最後,你並不需要真的需要拋出一個異常的全部區域,你也可以返回null
(或最好是None
),或者你可以進入一些後備分支,其工作沒有Graphics2D
。
總之,這是真的要走的路。它的語法體積比asInstanceOf
稍大,但增加的靈活性幾乎總是值得的。
215
g.asInstanceOf[Graphics2D];
相關問題
- 1. 如何投射css變量的類型?
- 2. DataRow字段從變量中投射
- 3. 如何在Scala List中投射每個元素?
- 4. 將變量投射到影片剪輯
- 5. 局部變量指向投射
- 6. 如何投射$和在輸入文本字段中作爲AS3中的變量?
- 7. 如何投射指針(使之變大)
- 8. 如何投射IDispatch在C#
- 9. RubyMotion >>如何將變量作爲特定類型投射?
- 10. ASP.NET不能在相同類型的變量中投射會話變量
- 11. Scala/Play ClassCastException:無法投射java.lang.Integer到java.lang.Long]
- 12. 如何投射System.Windows.Controls.SelectedItemCollection?
- 13. 如何投射RuntimeEnvironment.application?
- 14. 如何爲「oneOf」編寫函數或宏...在變量中進行投射?
- 15. Scala:仿射變換
- 16. Objective-C:在子類中投射超級實例變量?
- 17. Scala反射:如何列出範圍內的所有變量?
- 18. 在模板播放2.0模板中將Scala字符串投射到Scala中
- 19. Java直接投與vs使用本地變量投射
- 20. 如何在Android中類型投射類?
- 21. 如何在UIImageView/UIWebView中投射UIView
- 22. 如何在mobiaccess中投射物體?
- 23. 如何在Python中投射Postgres參數?
- 24. 如何在AsAsyncOperation中進行投射?
- 25. 如何在java中投射到CRTP?
- 26. 如何在C++中投射指針
- 27. 在Java中如何處理投射?
- 28. 如何在C中投射字符串?
- 29. Rgd如何轉換在php中投射
- 30. 如何在Java 8中投射Stream.empty()?
一旦我習慣了Scala,我學會了不使用`asInstanceOf`,因爲它違背了靜態類型系統的目的,並且感覺很糟糕。 – 2011-02-26 22:51:43
不幸的是,這是使用Swing時的常見操作。對於自定義繪畫操作,您需要重寫'public void paintComponent(Graphics g)'方法。 Graphics參數實際上是一個Graphics2D實例,但需要強制轉換。模式匹配版本可能比保證更冗長。請記住:絕對避免混淆的混亂和冗長! – hohonuuli 2011-10-16 06:19:28