专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序猿  ·  完美解释了递归,哈哈哈哈 ·  2 天前  
程序猿  ·  游戏爱好者 VS 程序员 ·  4 天前  
程序猿  ·  2024 互联网公司工作时长排行榜 ·  1 周前  
51好读  ›  专栏  ›  OSC开源社区

适用于 Android 开发的 Effective Java

OSC开源社区  · 公众号  · 程序员  · 2017-03-20 08:27

正文


OSC 协作翻译

原文:Effective Java for Android (cheatsheet).

链接:https://medium.com/rocknnull/effective-java-for-android-cheatsheet-bf4e3433889a#.6yz25jy84

译者:Tocy, 边城


“Effective Java” 被许多人看做是编写高效且可维护的 Java 代码的重要指导书之一。Android 使用 Java 开发是否意味着里面的建议都要用上?不完全是。 有些人认为这本书给出的大多数建议不适用于 Android 开发。在我看来,情况并非如此。


 我认为这本书的一些部分是不适用,不管是因为不是所有 Java 功能都已优化到能与 Android 一起使用(例如枚举、序列化等),还是因为是移动设备的限制例如 Dalvik/ART 表现不同于桌面版的 JVM)。 但不管怎样,本书中的大多数范式还是可以在稍作修改后或直接使用,从而构建一个更健康、更简洁和更易维护的代码库。


这篇博客整合了我在开发 Android 应用时,从 Effective Java 中学习到的重要内容。对于那些读过这本书的人,这篇文章就当是重新回顾一下,对于那些(还)没有阅读它的人,可以把这篇文章当作试读。


强制非实例化(non-instantiability)


如果你不想使用 new 关键字来创建对象,强制它使用私有构造函数。 这对那些仅包含静态函数的工具类尤其有用。




静态工厂


用静态工厂方法 (同时私有化构造器) 代替使用 new 和构造函数。这些工厂方法有自己的名称,不需要每次都返回一个对象的新实例,还可以根据需要返回不同的子对象。



[更新] 我们的读者 @stsdema28 提供了一个有用的提示:静态工厂方法会造成测试困难。如果遇到这种问题,需要使用在测试中使用可模拟的非静态工厂(或者一个可实现的假接口)。



构建器(Builder)


如果你的对象需要超过 3 个构造参数,那就使用构建器来构造对象。这写起来可能有点繁琐,但它扩展性良好而且容易看明白。如果你要创建值类,可以考虑 AutoValue。



避免易变性


不可变对象在它的整个生命周期都保持不变。这类对象所需要的数据都是在它创建的时候提供给它的。使用不可变对象有一些优点,比如简单、线程安全以及可共享。



保持每个类都不可有点困难。确有必要的情况下只能尽量保持类不可变(比如使用 private final 字段和 private class)。在移动端创建对象开销很大,所以注意不要过度创建。



静态成员类


如果你定义了一个不依赖于外部类的内部类,千万别忘了把它定义成静态的。如果不这样做,会导致每个内部类的实例都持有外部类的引用。




随处可见的泛型


Java 提供了类型安全支持。尽量避免使用原始类型或对象类型。在大多数情况下,泛型提供了编译时让代码类型安全的机制。



别忘了你可以在方法的参数和返回值中使用泛型:



为获得更佳的灵活性,你可以使用有界通配符(bounded wildcards)来扩展可接受类型的范围。




返回空值


当必须返回空的 list/collection 时避免使用 null。返回空的集合会使接口变简单(不需要为空返回的函数写文档或注释)并可以避免随机的 NPE。建议返回同一个空集合而不是重新创建一个。



不要使用 + String 操作


要连接几个字符串时,+ 操作也许可行。但不要将其用于大量字符串的连接,这样性能很糟糕。建议用 StringBuilder 替代。




可恢复的异常


我不赞成抛出指示错误的异常,但如果你这样做了,请确保异常可受检查且可恢复:




结论


这个列表并没有罗列书中的所有建议,也不是对书中某个建议的深度解析,而仅仅是对部分有用建议的摘录而已。




推荐阅读

3 月值得关注的 15 个 JavaScript 和 CSS 库

开发者福音,13 个最佳 JavaScript 数据网格库推荐

阿里宣布 Atlas 开源;Win10 被喷是一个广告平台;回归 Windows 不是技术原因?

点击“阅读原文”查看更多精彩内容