不需要了解对象如何接收 2 个不同的返回值



如果我们看下面的代码:

ImageLoader imageLoader = AppController.getInstance().getImageLoader();

注意getInstance((和getImageLoader((是如何开始调用的,每个都返回一些东西。这个对象,图像加载器如何接收 2 个不同的对象?还是我误解了一切...我有点困惑

下面是getInstance的样子:

public static synchronized AppController getInstance() {
    return mInstance;
}

以下是getImageLoader的样子:

public ImageLoader getImageLoader() {

    if (mRequestQueue == null) {
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

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

注意getInstance((和getImageLoader((是如何开始调用的, 每个人都在返回一些东西。这一个对象,图像加载器 接收 2 个不同的对象?

不,此行仅返回一个ImageLoader。它相当于:

AppController tmp    = AppController.getInstance(); // temporary intermediate variable
ImageLoader   loader = tmp.getImageLoader();        // final result

您只需链接方法调用,以防止自己存储中间变量,并在以后不重用 tmp 时保存一行代码。

语法:

ImageLoader imageLoader = AppController.getInstance().getImageLoader();

是以下各项的快捷方式表单:

AppController appController = AppController.getInstance();
ImageLoader imageLoader = appController.getImageLoader();

在这种情况下,作者不需要访问AppController实例,只需要访问它提供的ImageLoader实例。 当方法返回对象时,不必将该对象分配给变量即可使用。 在这种情况下,获取 AppController 实例的唯一原因是在其上调用getImageLoader()

您可以非常轻松地在强类型语言(如 Java(中链接方法,因为您始终知道方法的返回值。 您可以执行以下操作:

Integer value = SomeClass.someMethod().someOtherMethod().someThirdMethod();

在这种情况下,SomeClass有一个名为 someMethod 的方法,该方法返回某个类的实例。 此实例具有返回某个第二个类的实例的方法someOtherMethod。 第二个类有一个返回整数的方法someThirdMethod

如果您不需要超出当前调用范围的对象,则不必具有左侧赋值。

是的,你误解了它。

对象imageLoader只接收来自 getImageLoader() 的返回值,这(毫不奇怪(是一个ImageLoader

getImageLoader()是从 getInstance() 的返回值调用的,这是一个AppController

总结:该方法getInstance()返回一个AppController,您可以从中调用getImageLoader()然后将其保存在imageLoader变量中。

最新更新