这还是WeakReference吗?

时间:2013-12-10 13:55:20

标签: java android weak-references

我正在创建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部分结束之前,如果ExternalLibraryThingyuseItWisely时作出并分配,并在doSomethingUsefull时使用该指定值,那么它可以抛出NullPointerException吗? / p>

我想一个简单的答案可以解决这两个问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您将解除引用的对象传递给ExternalLibraryThingy#useItWisely方法。外部库并不关心您从弱引用中检索对象。

因此,对象在外部库中是否具有强引用完全取决于您调用它的方法。在不知道方法的作用的情况下,无法知道对象是否仍会被引用。

至于你的第二个问题,图书馆直接有MySpecialObject引用。从外部库的角度来看,它不会被null随机替换。