2014-10-10 85 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()); 
} 

做同樣的事情,但絕對更具可讀性,不是嗎?