Picasso 源码 commit 日记(5):如何写一个严谨的工具类?

以下代码笔记基于 commitId
:aef01ed7565a88392e4bb32d8deb986aab6d0177,commit 时间:2013/2/21, 12:53 AM。点击上面的 commitId 可以跳转到 github 看代码,配合本文阅读。

本系列的文章结构包括以下 5 个部分。 重构
是同样功能的代码的变动。 feature
是对比上次提交,这次提交的新功能。 设计
是我觉得可以提一下的代码设计,这部分可能不同的程序员会做不同的设计。 疑惑
是我看代码过程中觉得有问题或者不懂的地方。 知识点
是关于 Java 或者安卓的一些通用知识。

重构

抽取成 Utils 类

由于 Picasso.java checkNotMain
方法在几个地方都有用到,所以把它抽取成工具类里的静态方法

final class Utils {
  static void checkNotMain() {
    if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
      throw new IllegalStateException("Method call should not happen from the main thread.");
    }
  }

  private Utils() {
    // No instances.
  }
}
复制代码

优化代码可读性

for (Iterator<Entry> i = lruEntries.values().iterator(); i.hasNext(); )

改成了

Iterator<Entry> i = lruEntries.values().iterator();
while (i.hasNext())
复制代码
Map.Entry<String, Entry> toEvict = lruEntries.entrySet().iterator().next();
remove(toEvict.getKey());

改成了

remove(lruEntries.entrySet().iterator().next().getKey());
复制代码
import static com.squareup.picasso.external.DiskLruCache.open;
diskLruCache = open(directory, 1, 1, maxSize);

改成了

diskLruCache = DiskLruCache.open(directory, 1, 1, maxSize);
复制代码

一些变量提升成类静态常量,常量名字改成大写

  • private static final Handler handler
    里面 handler
    改成了 HANDLER
  • this.retryCount = 2;
    改成了 this.retryCount = DEFAULT_RETRY_COUNT;
    。声明了一个静态常量 DEFAULT_RETRY_COUNT = 2

不需要 getter 和 setter 封装。

把 Request.java 里面的很多 getter 和 setter 方法都取消了,改成直接访问 Request.java 的成员变量。例如

existing.getFuture().cancel(true); // 笔者注:existing 是一个 request
改成了
existing.future.cancel(true);
复制代码

注意 Request.java 里面的这些成员变量是 protected 的,所以属于包内可见。

feature

可以配置 error drawable

这个和commit 日记(2) 写的配置 placeHolder 差不多。

疑惑

placeholderResId 检测出错

在 Builder 里用 placeholderResId 设置 placeholder 的方法里,先检测了如果 placeholderResId != 0
,则报错。这里应该检测 placeholderResId <= 0
吧?正确的 placeholderResId 应该是大于 0 的。

public Builder placeholder(int placeholderResId) {
    if (placeholderResId != 0) {
        throw new IllegalArgumentException("Placeholder image resource invalid.");
    }
}
复制代码

原文 

https://juejin.im/post/5f1695a5e51d4534942df7aa

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Picasso 源码 commit 日记(5):如何写一个严谨的工具类?

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址