2014-10-10 83 views
0

我一直在这个tutorial和下面的代码已经难倒我的另一种方法:混乱的java:一个方法调用返回的东西

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(); 
因此

,我们怎么能什么请求队列的回报,当我们没有在一个变量中捕捉它的工作?

回答

1

getRequestQueue(),与其名称相反,实际上是一种有副作用的方法。这就是调用该方法并放弃其返回值的原因。该方法返回后,程序的状态将发生更改。

0

它应该,如果你需要利用返回的对象。

有时候,返回对象的方法实现了一些的东西,这证明了没有赋值的调用。

看起来该方法通过为其分配一个值来修改名为mRequestQueue的实例变量。

因此它返回该值,但也会影响到您的类的实例。

底线,从句法上看,这不是一个错误,虽然它看起来像设计不佳。

0

getter懒惰 - 初始化类的成员变量mRequestQueue,然后直接引用成员变量。

任何理智的人会改变

getRequestQueue(); 
if (mImageLoader == null) { 
    mImageLoader = new ImageLoader(this.mRequestQueue, 
      new LruBitmapCache()); 
} 

RequestQueue requestQueue = getRequestQueue(); 
if (mImageLoader == null) { 
    mImageLoader = new ImageLoader(requestQueue, 
      new LruBitmapCache()); 
} 

做同样的事情,但绝对更具可读性,不是吗?