我正在处理一个庞大的代码库,发现很多地方都有这种代码:
public static class RequestCustomData implements View.OnClickListener {
WeakReference<MainActivity> mainActivity;
public RequestCustomData(MainActivity activity) {
mainActivity = new WeakReference<>(activity);
}
@Override
public void onClick(View view) {
MainActivity activity = mainActivity.get();
activity.requestCustomData(true, null);
}
}
我有点困惑为什么这被用在那么多地方?我看了这份文件,但它没有很好地解释为什么这种代码在我正在工作的应用程序中如此频繁地使用。有人能否解释一下这是否是一种常见的模式?如果是,为什么?
https://community.oracle.com/blogs/enicholas/2006/05/04/understanding-weak-references
WeakReference
的预期目的真正发挥作用,onClick(...)
将抛出NullPointerException
。如果此代码没有崩溃,则使用WeakReference
可能是空洞编程的一个例子。 - Kevin Krumwiede