相当于 Scala 2.12 中的 scala.concurrent.util.Unsafe

Equivalent of scala.concurrent.util.Unsafe in Scala 2.12

我创建了对象的空实例,然后使用 运行 时间值对其进行了初始化。实施基于 Scala 2.11 中的 scala.concurrent.util.Unsafe,并且运行良好。

我知道 Unsafe 不好,因此在 Scala 2.12 中已弃用。

如果它被弃用,那么 Scala 2.12 中的 Unsafe 等价于什么?

假设您 运行 正在 sun.misc.Unsafe 仍然可用的 JVM 上(这将限制您可以 运行 在哪些 JVM 上,但使用 scala.concurrent.util.Unsafe 所以不会立即损失):

val unsafeInstance = // use in place of Scala 2.11 usages of scala.concurrent.util.Unsafe.instance
  classOf[sun.misc.Unsafe]
    .getDeclaredFields
    .filter(_.getType == classOf[sun.misc.Unsafe])
    .headOption
    .map { field => 
      field.setAccessible(true)
      field.get(null).asInstanceOf[sun.misc.Unsafe]
    }
    .getOrElse { throw new IllegalStateException("Can't find instance of sun.misc.Unsafe") }

代码略微改编自 Scala 2.11 源代码。

这可能是一个人花太多时间思考“可以”而没有考虑“应该”的例子。