你应该更新的 Java 知识
作者:dreamhead
出处:《你应该更新的Java知识》系列
你应该更新的 Java 知识
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://www.blogbus.com/dreamhead-logs/232899025.html
你应该更新的Java知识之常用程序库(一)你应该更新的Java知识之常用程序库(二)你应该更新的Java知识之构建工具你应该更新的Java知识之Observer
在Java里,如何初始化一个List呢?
我知道,你可以毫不费力地写出这样的代码:
List<String> names = new ArrayList<String>();
names.add("dreamhead");
这几乎是在Java 5/6风格的代码中随处可见的,但不知道你怎么想,反正这样的代码让我觉得很不爽。
首先,变量声明里存在重复,明明我已经知道它是一个String的List,还要再后面再说一次。如果你尝试过一些具有类型推演功能的语言,你就会知道,这种重复完全是可以由编译器处理掉的。Java 7也认为这样的代码不好,所以,它给我们提供了一个新的语法:
List<String> names = new ArrayList<>();
其实,即便是Java 5/6,我们也是有办法写出不那么冗余的代码。Guava已经为我们提供了一个解决方案,所以,同样的代码如果用Guava来写,它会是这样:
List<String> names = newArrayList();
这里,它利用了编译器的类型推演功能保证了类型的正确性。从代码上看,它甚至要比Java 7提供的解决方案键入的字符还少。
这只是第一步,再有我还要在List里面放入内容,让我们继续来看在Guava里面怎么做。
List<String> names = newArrayList("dreamhead");
一行代码搞定,因为支持变参,所以,我们甚至可以一次放入很多元素。但是,这不是终点。
在很多数情况下,使用List时,我们并不关心其具体的类型,只是把它当做一组数据来用,而并不是为了动态添加一些东西。这个时候,我们只要有一个不变的List就可以了。Guava里的ImmutableList就可以很好地把我们的意图表现出来。一方面,它实现了List接口,你可以把它当做一个List来用,另一方面,如果试图改变其中的内容,它会抛出异常。
就我们这里讨论的内容而言,它的初始化方法更为简单:
List<String> names = of("dreamhead");
这里讨论的只是List,但大多数内容同样适用于Set和Map,另外两种我们最常用的数据结构。
需要额外加以解释的是,of其实是为少量元素初始化打开的方便之门。所以,如果查看of的实现,你会发现List最多支持12个元素的处理,而Set只有6个,只是因为可变参数的存在,它可以支持到很多。但是,Map的则不同,它只有5对,因为它的键值对必须成对出现。如果你需要元素很大的ImmutableMap,一个更好的解决方法是采用Builder,下面是一个例子:
ImmutableMap<String, String> contentTypeMap = ImmutableMap.<String, String>builder()
.put("png", "image/png")
.put("gif", "image/gif")
.put("jpg", "image/jpeg")
.put("jpeg", "image/jpeg")
.put("tiff", "image/tiff")
.put("css", "text/css")
.put("html", "text/html")
.put("txt", "text/plain")
.put("js", "application/x-javascript")
.put("json", "application/json")
.put("pdf", "application/pdf")
.put("zip", "application/zip")
.put("xml", "text/xml")
.build();
在程序设计领域,有一个经典的说法,语言设计就是程序库设计,程序库设计就是语言设计。像List、Map这样的集合类型,有些语言把它放进了语法,使得它用起来更简单。像Java这样做起事来一板一眼的程序设计语言,如果有了好的程序库支撑,也可以让它相对方便,Guava在这方面做了一个很好的尝试。
对普通的Java程序员而言,是时候抛弃繁重的Java旧语法,拥抱新时代的Java了。
你应该更新的 Java 知识的更多相关文章
- 你应该更新的 Java 知识之常用程序库【转载】
在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进.如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东 ...
- 应该更新的Java知识之常用程序库
摘自:http://www.blogbus.com/dreamhead-logs/226738702.html 在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进.如果你 ...
- <转载> 你应该更新的Java知识之常用程序库(一)
原文出处:http://www.blogbus.com/dreamhead-logs/226738702.html 很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进.如果 ...
- 2016年6月20日 JAVA知识框架
基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1 JAVA简介 2 JAVA编程环境 3 JAVA基本编程结构 4 ...
- 随笔编号-16 JAVA知识框架
基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1 JAVA简介 2 JAVA编程环境 3 JAVA基本编程结构 4 ...
- Java知识体系
Java知识体系 java知识结构.jpg web框架.jpg 计算机课程体系.png 2016-08-19_090929.png 流行的哈希算法生存状况.jpg "JAVA之父" ...
- Android开发学习必备的java知识
Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...
- Java知识体系纲要
最近一段时间,把Java主要涉及到的大概念都大致学习了一遍,为了让自己能够更好地形成对Java知识体系的整体把握,先把学过的知识点添加到自己画的思维导图上. 整个Java知识体系的划分,我自己主要将它 ...
- 震惊!90%的程序员不知道的Java知识!
震惊!90%的程序员不知道的Java知识! 初学Java的时候都会接触的代码 public static void main(String[] args){ ... } 当时就像背公式一样把这行代码给 ...
随机推荐
- 洛谷P1739 表达式括号匹配
题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返 ...
- tf.truncated_normal和tf.random_normal使用方法的区别
1.tf.truncated_normal使用方法 tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=No ...
- CF786A - Berzerk
/* CF786A - Berzerk http://codeforces.com/contest/786/problem/A 博弈论 直接搜出NP状态图.记得要记忆化剪枝. * */ #includ ...
- 数据库-mongodb有哪些命令工具
MongoDB 系统文件说明 1.mongo.exe 命令行客户端工具 2.mongod.exe 数据库服务程序 3. ...
- 洛谷—— P3119 [USACO15JAN]草鉴定Grass Cownoisseur || BZOJ——T 3887: [Usaco2015 Jan]Grass Cownoisseur
http://www.lydsy.com/JudgeOnline/problem.php?id=3887|| https://www.luogu.org/problem/show?pid=3119 D ...
- POJ--2112--Optimal Milking【Floyd+Dinic+二分答案】
链接:http://poj.org/problem?id=2112 题意:有k个挤奶器.编号1~k,c头牛,编号k+1~k+c,每一个挤奶器最多能给m头牛挤奶,给你一个k+c的邻接矩阵.要求每头牛都能 ...
- Java 微信公众号上传永久素材的方法
Java 微信公众号上传永久素材的方法 学习了:http://blog.csdn.net/u013791374/article/details/53258275 膜拜一下,源码如下: @Request ...
- centos6安装eclipse
1. 下载eclipse 我下载的是eclipse-jee-juno-SR2-linux-gtk-x86_64.tar.gz 能够在http://www.eclipse.org/downloads/处 ...
- Visual C++ 经常使用快捷键
大写和小写 Ctrl+Shift+U: 所有变为大写 Ctrl+U: 所有变为小写 凝视 Ctrl+K+Crtr+C: 凝视选定内容 Ctrl+K+Crtr+U: 取消选定凝视内容 折叠 折叠代码: ...
- 假设让我又一次设计一款Android App
转载请注明出处: 本文来自aspook的博客:http://blog.csdn.net/ahence/article/details/47154419 开发工具的选择 开发工具我将选用Android ...