作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
How to write "asInstanceOfOption" in Scala的答案中给出了便利的asInstanceOfOpt
版本asInstanceOf
的实现。看来,在Scala 2.9.1中,此解决方案现在仅适用于AnyRef:
class WithAsInstanceOfOpt(obj: AnyRef) {
def asInstanceOfOpt[B](implicit m: Manifest[B]): Option[B] =
if (Manifest.singleType(obj) <:< m)
Some(obj.asInstanceOf[B])
else
None
}
最佳答案
如果您在Scala API中查找,则函数singleType
带有类型为AnyRef的参数。我真的不知道此决定的背景,但似乎您需要解决它。我建议不要使用singleType
方法,而不是使用classType
方法,该方法基本上可以为任何类创建 list 。这将需要更多代码,但看起来可能像这样:
class WithAsInstanceOfOpt(obj : Any) {
def asInstanceOfOpt[B : Manifest] : Option[B] = // [B : Manifest] is shorthand for [B](implicit m : Manifest[B])
if (Manifest.classType(manifest, obj.getClass) <:< manifest)
Some(obj.asInstanceOf[B])
else None
}
关于scala - 如何编写asInstanceOfOpt [T],其中T <: Any,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7873936/
我是一名优秀的程序员,十分优秀!