我正在创建WeakReference
并将其保留在某处。
WeakReference<MySpecialObject> mWeakReference = new WeakReference<MySpecialObject>(new MySpecialObject("My","Special","Data"));
但是其他一些外部库(我不是这样做的)确实需要MySpecialObject
实例。当我使用下面类似的东西时:
ExternalLibraryThingy#useItWisely(mWeakReference.get());
第1部分的结尾
一段时间后我打电话
ExternalLibraryThingy#doSomethingUsefull(); //which I dont know it kept a reference while calling "useItWisely" method.
第2部分的结尾
在第1部分结束之前,我的原创MySpecialObject
对象是否仍被弱引用?我的意思是,如果我致电mWeakReference.get()
,是否有机会获得null
?换句话说,OS垃圾可以随意收集吗?
在第2部分结束之前,如果ExternalLibraryThingy
在useItWisely
时作出并分配,并在doSomethingUsefull
时使用该指定值,那么它可以抛出NullPointerException
吗? / p>
我想一个简单的答案可以解决这两个问题。提前谢谢。
答案 0 :(得分:1)
您将解除引用的对象传递给ExternalLibraryThingy#useItWisely
方法。外部库并不关心您从弱引用中检索对象。
因此,对象在外部库中是否具有强引用完全取决于您调用它的方法。在不知道方法的作用的情况下,无法知道对象是否仍会被引用。
至于你的第二个问题,图书馆直接有MySpecialObject
引用。从外部库的角度来看,它不会被null
随机替换。