gpt4 book ai didi

scala - 如何编写asInstanceOfOpt [T],其中T <: Any

转载 作者:行者123 更新时间:2023-12-04 04:39:08 27 4
gpt4 key购买 nike

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
}

可以重写以支持Any吗?

最佳答案

如果您在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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com