Scala 将 Any 转换为 Option[T]

标签 scala casting

类似于:

  def cast[T](o: Any): Option[T] = o match {
    case v: T => Some(v)
    case _ => None
  }

或:

  def cast[T](c: Class[T], o: Any): Option[T] = o match {
    case v: T => Some(v)
    case _ => None
  }

这是个好主意吗?是否有等效的标准库?

我为什么会收到以下 Scala 编译器警告以及如何解决:

Warning:(7, 13) abstract type pattern T is unchecked since it is eliminated by erasure
    case v: T => Some(v)

最佳答案

使用类标签。类型信息在运行时会丢失。因此,您需要提供类型信息,这可以使用类标记来完成。

import scala.reflect.ClassTag

def cast[T: ClassTag](o: Any): Option[T] = o match {
 case v: T => Some(v)
 case _ => None
}

Scala REPL

scala> cast[String]("hello")
res2: Option[String] = Some(hello)

scala> cast[Int]("scala")
res3: Option[Int] = None

关于Scala 将 Any 转换为 Option[T],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42539645/

相关文章:

scala - DataFrame 化的 zipWithIndex

ruby - Scala 的扩展性是否优于其他 JVM 语言?

java - 无法从 ArrayList<Object> 转换为 ArrayList<MyObject>

Java instanceof 不匹配 Double

java - 动态转换对象

c++ - 如何摆脱空指针

.net - 如何在 C++.net 中将 gcroot<Object^> 转换为 IMyInterface?

scala - intellij scala 创建可执行jar文件

对 Scala 案例类的反射(reflection)

scala - 语法、Scala 解析组合器和无序集