Java 8的五大开发技巧
转载:http://geek.csdn.net/news/detail/94219
在Java 9发布之前,我们来分享一些Java 8开发技巧,本文翻译自JetBrains高级开发主管Trisha Geed的Java 8 Top Tips。
【以下为译文】
在使用JAVA 8进行开发多年后,结合个人使用IntelliJ IDEA的心得,我总结了以下几个JAVA8技巧供大家参考。
Optional
Optional 是一个被高度低估的特性,假若能把它运用恰当,其实它是能帮助减少大量的NullPointerExceptions(无效指针)错误的。以下是有关Optional使用的两个要点:
- Optional应只用于返回类型而不是参数或域
如果你尝试这样处理,IntelliJ IDEA将会作出如下提示:
- 避免使用调用的get()
Optional的强项是表达空值并让你对此做出处理。所以在进行下一步前进行值检查是很重要的。幸好IntelliJ IDEA也会对出做出提示:
取而代之,可以尝试使用orElse或orElseGet。
Lambda表达式的使用
Lambda是Java 8的又一个亮点,以下是有关Lambda的使用技巧:
- 尽量简单
化繁为简是正确使用lambda表达式的关键。你可以把它们简化为单独一行,也可以在方法中重构更复杂的表达式。
- 清晰明了
由于lambda表达式欠缺类型信息,所以有时会把类型信息放入参数中:
这未免过于冗长了,怎么办?我更倾向于为参数起个有意义的名字。例如:
Lambda表达式的设计
虽然我们较少会以lambda为参数来创建一个方法,但是如果有这样的需求,该如何处理呢?
- IntelliJ IDEA能帮助实现函数型参数
- 为你的函数性接口添加@FunctionalInterface
如果你需要自定义函数性接口,那么IntelliJ IDEA将会成为很好的监督者:
覆盖提示:
重复声明:
为类而不是接口进行定义:
Streams(流)
Stream API是Java8新引入的,使用它有哪些地方注意的呢?
- 有序排列
- 使用方法引用
- 进行集合递归时,尽量使用Streams API
请对比下列两段代码:
在数组循环中使用for循环
在元数据类型数组中使用for循环,将会得到最好的性能表现:
小结
我每天都在寻找新方法,尝试新思路,希望能不断完善个人编程的最佳实践。
Java 8的五大开发技巧的更多相关文章
- !! 浅谈Java学习方法和后期面试技巧
浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...
- 最受Web前端开发者欢迎的五大开发工具
工其事,必利于器.好的开发工具毋容置疑会帮助Web前端开发者事半功倍,51CTO在上期主办的技术沙龙<大型网站PHP开发之道> 对现场的百余位Web开发者做了问卷调查,后经51CTO调研小 ...
- WebApp开发技巧大全 看了就明白了
[转载]阅读原文 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词-WebApp(意为基于WEB形式的应用程 序,运行在高端的移动终端设备).开发者们都 ...
- Android开发技巧——大图裁剪
本篇内容是接上篇<Android开发技巧--定制仿微信图片裁剪控件> 的,先简单介绍对上篇所封装的裁剪控件的使用,再详细说明如何使用它进行大图裁剪,包括对旋转图片的裁剪. 裁剪控件的简单使 ...
- Android开发技巧——使用PopupWindow实现弹出菜单
在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...
- Android开发技巧——实现可复用的ActionSheet菜单
在上一篇<Android开发技巧--使用Dialog实现仿QQ的ActionSheet菜单>中,讲了这种菜单的实现过程,接下来将把它改成一个可复用的控件库. 本文原创,转载请注明出处: h ...
- Android开发技巧——自定义控件之使用style
Android开发技巧--自定义控件之使用style 回顾 在上一篇<Android开发技巧--自定义控件之自定义属性>中,我讲到了如何定义属性以及在自定义控件中获取这些属性的值,也提到了 ...
- Android开发技巧——自定义控件之自定义属性
Android开发技巧--自定义控件之自定义属性 掌握自定义控件是很重要的,因为通过自定义控件,能够:解决UI问题,优化布局性能,简化布局代码. 上一篇讲了如何通过xml把几个控件组织起来,并继承某个 ...
- Android开发技巧——自定义控件之组合控件
Android开发技巧--自定义控件之组合控件 我准备在接下来一段时间,写一系列有关Android自定义控件的博客,包括如何进行各种自定义,并分享一下我所知道的其中的技巧,注意点等. 还是那句老话,尽 ...
随机推荐
- 6.mybatis异常:SQL Mapper Configuration,Error parsing Mapper XML,Could not resolve type alias
在xxxMapper中 <select id="getClazz" parameterType="int" resultType="getCla ...
- run a Freight robot (3)
5.Logging In Once the robot is turned on and the robot is on the network, ssh into the computer of t ...
- JavaScript删除-confirm
一> onclick="javascript:if (confirm('您确定要删除吗?注意:此操作不可恢复,请谨慎操作!')){return true;} return false; ...
- Hibernate 对象的三种状态
hibernate对象的三种状态: (一) 瞬时(临时)状态: 对象被创建时的状态,数据库里面没有与之对应的记录! (二) 持久状态: 处于session的管理中,并且数据库里面存在与之对应的 ...
- struts2 if正确标签示例
下面总结一下struts2 中if标签的使用 (1)判断字符串是否为空 <s:if test="user.username==null or user.username==''&quo ...
- mysql 索引的原理
1.考虑下面的情况,mysql> desc student;+----------+-------------+------+-----+---------+-------+| Field | ...
- linux环境变量LD_LIBRARY_PATH
LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径 ...
- Node.js superagent 采集 URL 编码问题
今天在用Node学习采集的时候遇到一个问题,如这个链接地址 http://www.meishij.net/胡萝卜 就是用浏览器的方式访问链接可以打开,但用superagent 去模拟请求,就请求不到 ...
- 如何设置DIV水平、垂直居中
一.水平居中 需要设置两点: 1 设置DIV 的width属性即宽度. 2 设置div的margin-left和margin-right属性即可 代码: <div style="w ...
- 笔试——JAVA相关
1. String 和 StringBuffer 的区别(转自http://pengcqu.iteye.com/blog/487538) Java笔试题经常考到“String和StringBuffer ...