0

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

我知道Unsafe这很糟糕,因此在 Scala 2.12 中已被弃用。

如果它已被弃用,那么UnsafeScala 2.12 中的等价物是什么?

4

1 回答 1

1

假设您在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 源代码。

这可能是一个花费大量时间思考“可以”而没有想到“应该”的例子。

于 2021-05-18T12:43:24.563 回答