我正在尝试在Scala中实现Phantom Reference来替换finalize()。我有一个文件对象,需要使用Phantom Reference进行GC编辑。虽然java中有一些代码示例,但我无法在Scala中找到任何内容。我确实尝试过像Scala一样写作:
val q = new ReferenceQueue()
val phantom = new PhantomReference(file,q)
但是我收到以下错误
found : java.lang.ref.ReferenceQueue[Nothing]
[error] required: java.lang.ref.ReferenceQueue[_ >: java.io.File]
[error] Note: Nothing <: Any, but Java-defined class ReferenceQueue is invariant in type T.
[error] You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
[error] val phantom = new PhantomReference(file,q)
我理解我错过了一些微不足道的东西,但我对Scala并不十分精通。有人可以帮忙吗?
答案 0 :(得分:0)
由于类型推断在Scala中的工作方式,q
被推断为java.lang.ref.ReferenceQueue[Nothing]
类型,但您希望它是java.lang.ref.ReferenceQueue[File]
,因此您需要明确这一点当你创建它时:
val q = new ReferenceQueue[File]()