我正在创建一个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
?换句话说,操作系统垃圾可以随意收集吗?
直到第 #2 部分结束,如果 ExternalLibraryThingy
在 useItWisely
时进行了赋值,并在 doSomethingUsefull
时使用该赋值,可以吗抛出NullPointerException
?
我想一个简单的答案就可以解决这两个问题。提前致谢。
最佳答案
您将取消引用的对象传递给 ExternalLibraryThingy#useItWisely
方法。外部库不关心您从弱引用检索对象。
因此,该对象是否在外部库中具有强引用完全取决于您调用它的方法。如果不知道该方法的作用,就不可能知道该对象是否仍会被引用。
至于你的第二个问题,该库直接有 MySpecialObject
引用。从外部库的角度来看,它不会被随机替换为null
。
关于java - 这还是WeakReference吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496405/