如果我们看下面的代码:
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
变量中。