我一直在研究这个tutorial,以下代码让我难过:
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public ImageLoader getImageLoader() {
getRequestQueue();
//getRequestQueue returns an object, but we dont have any variable to receive it.. how is this possible ?
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue,
new LruBitmapCache());
}
return this.mImageLoader;
}
所以问题是getRequestQueue返回一个对象,但我们没有任何变量来接收它..这怎么可能?
示例:不应该是这样的:
RequestQueue x = getRequestQueue();
因此,当我们没有在变量中捕获它时,我们如何处理RequestQueue返回的内容?
答案 0 :(得分:1)
getRequestQueue()
实际上是一种带有副作用的方法。这就是调用该方法并丢弃其返回值的原因。方法返回后,程序的状态将发生变化。
答案 1 :(得分:0)
如果你需要利用返回的对象,它应该是。
有时候,返回对象的方法会实现一些某种的逻辑,这可以在没有赋值的情况下证明调用的合理性。
看起来该方法通过为其赋值来修改名为mRequestQueue
的实例变量。
因此它返回该值,但也会影响您的类的实例。
底线,从语法上来说这不是一个错误,虽然它看起来很糟糕。
答案 2 :(得分:0)
getter lazy-initialize类的成员变量mRequestQueue
,然后直接引用成员变量。
任何合理的人都会改变
getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue,
new LruBitmapCache());
}
到
RequestQueue requestQueue = getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(requestQueue,
new LruBitmapCache());
}
同样的事情,但绝对更具可读性,不是吗?