我创建了对象的空实例,然后使用运行时值对其进行初始化。实现基于scala.concurrent.util.Unsafe
Scala 2.11 并且运行良好。
我知道Unsafe
这很糟糕,因此在 Scala 2.12 中已被弃用。
如果它已被弃用,那么Unsafe
Scala 2.12 中的等价物是什么?
我创建了对象的空实例,然后使用运行时值对其进行初始化。实现基于scala.concurrent.util.Unsafe
Scala 2.11 并且运行良好。
我知道Unsafe
这很糟糕,因此在 Scala 2.12 中已被弃用。
如果它已被弃用,那么Unsafe
Scala 2.12 中的等价物是什么?
假设您在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 源代码。
这可能是一个花费大量时间思考“可以”而没有想到“应该”的例子。