java - 这还是WeakReference吗?

标签 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?换句话说,操作系统垃圾可以随意收集吗?

直到第 #2 部分结束,如果 ExternalLibraryThingyuseItWisely 时进行了赋值,并在 doSomethingUsefull 时使用该赋值,可以吗抛出NullPointerException

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

最佳答案

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

因此,该对象是否在外部库中具有强引用完全取决于您调用它的方法。如果不知道该方法的作用,就不可能知道该对象是否仍会被引用。

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

关于java - 这还是WeakReference吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496405/

相关文章:

java - 如何在未捕获的异常处理程序中重新启动kafka Stream应用程序?

android - 是否可以增加 Android 上的 float 操作按钮大小?

python - `weakref` 回调可以替换 `__del__` 吗?

java - 如何让控制台在右侧边缘输出字符串?

java - Jboss中的axis2.jar冲突

android - 如何从 android 中运行的视频中捕获图像?

android - 我在运行应用程序时收到 SQLCipher 错误

android - 如何泄漏上下文。 MyHandler 的实例会导致泄漏吗?

swift - 有没有办法检查 `unowned` (实际上是 `unowned(safe)` )引用已被取消?

java - 我们可以创建一个通用类数组吗?