给定一个类型为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