令人困惑的java:一个方法调用另一个返回东西的方法

时间:2014-10-10 11:59:40

标签: java android android-volley

我一直在研究这个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返回的内容?

3 个答案:

答案 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());
}

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