原文出处:http://www.blogbus.com/dreamhead-logs/226738702.html

很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进。如果你曾离开Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老Java中的新东西。

Guava

一句话,只要你做Java项目,就应该用Guava

guava是Google出品的一套Java核心库,在我看来,它甚至应该是JDK的一部分。作为一个Java程序员,如果你没抱怨过JDK的设计,只能说明一点,你写得程序还是太少。正是JDK设计不彰,才有了一些项目来补充JDK的不足。如果说老Java程序员应该听说过Apache Commons Lang,那新Java程序员该知道的就是Guava了。

老Java程序员更多的是知道Google Collections,不妨到它的主页上走一遭,你会看到这个库已经改名为Guava。事实上,Guava并不直接等于Google Collections,Guava是一个超集。Guava实在太强大了,要想展现它的强大,需要专门的介绍,这里就不展开了。

下面以一个统计单词出现个数的小程序作为这个段落的结尾,虽然无法与许多其它语言的实现相提并论,但作为一个Java程序员,你不妨想一下按照传统方式,这段代码应该是什么样子。

String content = Files.toString(new File(args[0]), Charset.defaultCharset());
  Iterable texts = Splitter.on(CharMatcher.WHITESPACE)
                                                 .omitEmptyStrings()
                                                 .trimResults()
                                                 .split(content);
  Multiset collection = HashMultiset.create(texts);

Joda Time

你觉得一个API设计得差到什么份上,才会把自己差不多的API全部Deprecated掉。java.util.Date便是这样的奇葩。因为它的API几乎都是反直觉的,几乎所有敢于用它的Java程序员都吃过它的亏。想初始化个2013年的第一天,还真不那么容易:

Date firstDayOf2013 = new Date(113, 0, 1);

如果你是个Java新手,你能猜出113是从哪来的吗?(好吧,它是2013-1900,至于为什么是1900,这真得问API的设计者了)。

Joda Time就是人们实在无法忍受这样东西的产物。同样的代码用Joda Time实现:

DateTime firstDayOf2013 = new DateTime().withDate(2013, 1, 1);

无论如何,你知道这能看出这些参数的含义了。不只如此,你还可以计算两天后是什么日子:

firstDate.plusDays(2);

日期格式化,也是JDK Date系列API里一大特色,你必须把代码写成下面这样:

new SimpleDateFormat("yyyy.MM.dd").format(firstDayOf2013)

作为一个初始化很慢的构造函数,你还必须每次调用,因为它不是线程安全的。同样的代码,在Joda Time里,我们可以用DateTimeFormatter:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy.MM.dd");

...

formatter.print(dateTime);

请尽管放心大胆把formatter声明成一个字段,因为它是线程安全的。

当然,Joda Time的强大远不止于此。当然,JDK也并不是那么完全的自暴自弃,于是,有了一个JSR 310专门设计新的Date API。JSR 310的spec lead是Steven Colebourne,此人正是Joda Time的作者。不过,虽然JSR 310为我们描绘了Date的全新景象,但Java 8出来之前就先别打它的主意了,乖乖地用Joda Time吧。

<转载> 你应该更新的Java知识之常用程序库(一)的更多相关文章

  1. 你应该更新的 Java 知识之常用程序库【转载】

    在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进.如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东 ...

  2. 应该更新的Java知识之常用程序库

    摘自:http://www.blogbus.com/dreamhead-logs/226738702.html 在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进.如果你 ...

  3. 你应该更新的 Java 知识

    作者:dreamhead 出处:<你应该更新的Java知识>系列 你应该更新的 Java 知识 Tag:你应该更新的Java知识 Java Guava 集合 版权声明:转载时请以超链接形式 ...

  4. 2016年6月20日 JAVA知识框架

    基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1  JAVA简介 2  JAVA编程环境 3  JAVA基本编程结构 4 ...

  5. 随笔编号-16 JAVA知识框架

    基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1  JAVA简介 2  JAVA编程环境 3  JAVA基本编程结构 4 ...

  6. Java知识体系

    Java知识体系 java知识结构.jpg web框架.jpg 计算机课程体系.png 2016-08-19_090929.png 流行的哈希算法生存状况.jpg "JAVA之父" ...

  7. Android开发学习必备的java知识

    Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...

  8. Java知识体系纲要

    最近一段时间,把Java主要涉及到的大概念都大致学习了一遍,为了让自己能够更好地形成对Java知识体系的整体把握,先把学过的知识点添加到自己画的思维导图上. 整个Java知识体系的划分,我自己主要将它 ...

  9. 震惊!90%的程序员不知道的Java知识!

    震惊!90%的程序员不知道的Java知识! 初学Java的时候都会接触的代码 public static void main(String[] args){ ... } 当时就像背公式一样把这行代码给 ...

随机推荐

  1. Swift 设计指南之 编程规范

    基本准则 用法一目了然是你设计时最重要的目的. 方法和属性这样的实体只声明一次,却会被重复调用.因此你在设计 API 时应尽可能使其简单明了.当评估某个设计时,只阅读声明往往是不够的,有时还需要检查它 ...

  2. iOS网络-01-NSURLRequest与NSURLConnection

    NSURLRequest NSURLRequest封装了一次网络请求所需要的数据,主要封装了以下信息: 请求路径(URL) 请求方法(GET或POST) 请求头 请求体 超时参数 NSURLReque ...

  3. XAlign:用于代码对齐的Xcode插件

    除下面的插件对齐,xcode自带有cmd+v,在没有复制或者剪切的情况下,直接按cmd+v会有着对齐参数标签冒号的作用. XAlign 是一个 Xcode 的实用插件,用于对齐规范代码.除了插件作者  ...

  4. Saiku 下载,安装

    Saiku是一个模块化的开源分析套件,它提供轻量级的OLAP(联机分析处理),并且可嵌入.可扩展.可配置. 主页:http://community.meteorite.bi 如何安装摘自: http: ...

  5. 20个简化开发任务的 JavaScript库

    所谓JavaScript库就是预先写好的可以简化基于JavaScript的应用程序开发的,尤其是Ajax和其它以web为中心的技术的 JavaScript代码集.JavaScript主要用于写内嵌于H ...

  6. [Weblogic]如何清理缓存

    背景:在开发调试或测试时,很多时候重新更新部署服务后会发现某些更新并没有体现到,还是之前的情况,也或者会出现其他错误问题,这个时候就要考虑到可能是weblogic缓存未清理引起. 清理缓存步骤如下: ...

  7. Memcache笔记05-Memcache安全性

    Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以 ...

  8. PHP模拟发送POST请求之一、HTTP协议头部解析

    WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其基于URL的直观,易被我们了解,可POST请求因其信息的隐蔽,在安全的同时,也给开发者们模拟发送带来了麻烦.接下来的几篇博文中,我 ...

  9. Java NIO入门

    NIO入门 前段时间在公司里处理一些大的数据,并对其进行分词.提取关键字等.虽说任务基本完成了(效果也不是特别好),对于Java还没入门的我来说前前后后花了2周的时间,我自己也是醉了.当然也有涉及到机 ...

  10. webstorm 注册码

    User Name: EMBRACE License Key: ===== LICENSE BEGIN ===== 24718-12042010 00001h6wzKLpfo3gmjJ8xoTPw5m ...