Java 10大骚操作写法,亮瞎boss的双眼!
想不想学习装 B 式的 Java 骚操作花式写法?
没错,一文交会你!
1、集合初始化
集合的创建、赋值一步到位,想不想学?
来,上边跟我一起画个 List,在你下边画一个Map……
哈哈,高大上的写法,栈长以前写过,写法虽然是很装X,然而并没有什么卵用。
2、算术
注意到上面size的写法没有?
明明可以写成:
final int size = 256;
他非要写成:
final int size = -(-128) + 127 + 1;
这么装 B 的写法来自 JDK 包装类java.lang.Byte里面的静态方法。
为什么要这么写呢?
这样的写法在 JDK 里面有很多,大家看到这些写法都会觉得很奇怪,Java技术栈微信群里、知识星球里面有曾有粉丝问我这是为什么。
真正缘由无从考察,但栈长我觉得写 JDK 的大神其实就想告诉你,Byte 的 256 个数是由 -128 ~ 127 这个范围组成的,起到一个标识数字范围的作用而已。至少 Byte 为什么取这个范围,为什么byte取值-128~127??这篇文章可以解密。
如果你知道其中的更多道道,欢迎留言分享!
3、移位
这两个变量来自java.util.HashMap源码,你可能也非常好奇为什么不直接写成数字,要弄一个移位骚操作?
这是在告诉开发者,HashMap 的容量大小必须是 2 的幂次,不然会造成空间浪费。另外,HashMap 容量为什么总是为 2 的次幂?这篇推荐看下。
4、复制变量
以上同样来自java.util.HashMap的源码,为什么不直接用values:
而要重新定义一个vs来绕一个弯呢?
这样写不是更简单么?
JDK里面大量这样的写法,这是为什么呢?!
那是因为操作局部变量要比读取全局变量要更快,另外,我个人觉得还有一个好处,再申明一下局部变量,可以很明显的看到这个变量的类型,而不要翻到上面或者用鼠标移上去来看变量类型。
另外提一点,上面的复制变量再操作的方式让我想到了CopyOnWriteArrayList,这也是让当前变量不被其他线程改变保证当前线程变量一致性的一种方式。
写 JDK 源码的都是大神啊,透过源码,我们能学到太多东西!
5、泛型
来看一段泛型的灵活运用:
public <R> Observable<R> compose(Transformer<? super T, ? extends R> transformer) {return ((Transformer<T, R>) transformer).call(this);
}
这个泛型方法写得牛 X 吧,泛型 T、R、通配符(?)、上边界(extends)和下边界(super)都用上了!
常用的泛型含义:
- T - Type(类型)
- R - Result(结果)
- K - Key(键)
- V - Value(值)
- E - Element (元素)
- N - Number(数字)
- ? - 不确定类型
上面的泛型我们应该有常见到吧,边界和通配符不懂的可以看下这篇文章吧:困扰我多年的Java泛型 和 ,终于搞清楚了。
泛型要学会用,学好能装B。
6、Lambda
Lambda 表达式这是 Java 8 里面添加的新特性,用来简化匿名内部类以及结合函数式接口编程用的。
如下面创建线程的示例:
三个不同的写法,我们再也不用写new Runnable()的一大堆 的匿名内部类了,是不是很清爽了!
如果你还不会用Lambda表达式,那真的 OUT 了,可以关注微信公众号:Java技术栈,在后台回复:新特性,我已经写了一大堆教程了。
下面是一个Lambada真实案例:
上述示例省去了 newCommandLineRunner的匿名内部类的过程。
7、函数式编程
上面有提到函数式编程,这是 Java 8 里面添加的新特性,我之前在公众号里已经写过很多 Java 新特性的教程,这也不是新玩法了,已经被玩烂了。
来看一个真实的案例,来自 Spring Boot 的邮件发送自动配置:
第一次看到这段代码的时候,我内心是拒绝的,很难理解。
上面的 from 和 to 方法分别用到了Supplier和Consumer函数式接口,还用到了双冒号::结合使用,讳莫如深,还能结合Lambda表达式使用。
函数式编程很厉害,虽然会用,但到现在我也觉得很高深,可读性和可理解性太差了,但是,装 X 必学、必用。
8、流关闭
没错,你看到的这个关闭流骚操作是 Java 9 的新语法糖,较 Java 7 又简化了try-with-resources用法,装 X 的姿势越来越多了。
关于try-with-resources的详细介绍及演进过程,大家可以阅读这篇文章:JDK9新特性实战:简化流关闭新姿势,或者可以关注微信公众号:Java技术栈,在后台回复 "新特性" 获取这篇文章完整版。
不知道的可能上来就一顿骂了,你流关闭动作在哪,为什么不关闭流,多跟着栈长学点新知识吧,哈哈。
9、类型推断
关注Java技术栈公众号的老读者应该都看过,Java 10 刚出来的时候,我写过两篇新特性文章:
- Java 10的10个新特性,将彻底改变你写代码的方式!
- Java 10 实战第 1 篇:局部变量类型推断
来,我再挑两个示例来欣赏下:
示例1:
var javastack = "javastack";
示例2:
private static void testLoop() {for (var i = 0; i < 3; i++) {for (var m = 10; m < 15; m++) {System.out.println(i + m);}}
}
这样写会不会被打?也太省事了!
类型推断出来后,都说 Java 越来越像 Javascript 了,其实就是 Java 10 增加的一种语法糖而已,在编译期间会自动推断实际类型,其编译后的字节码和实际类型一致。
10、模式匹配
instanceof模式是匹配这是 Java 14 推出来的新特性:
if (object instanceof Kid kid) {// ...
} else if (object instanceof Kiddle kiddle) {// ...
}
匹配后直接创建对象和赋值直接拿来用,不需要再添加强制转换的代码,大大提高了可读性和安全性。具体可以看这篇文章:Java 14 之模式匹配(后续会发布,差点东西没整理完),非常赞的一个新特性!
Java 10大骚操作写法,亮瞎boss的双眼!相关推荐
- Mathematica,亮瞎你的双眼
总有大一的童鞋抱怨:"高数,蓝瘦,香菇." 那么,如何才能不挂在高数这棵"高树"上?又能较轻松地把握高数的精髓呢? 你若在百度里输入"学好高数&quo ...
- JAVA十大B格写法!再也不怕没有小姐姐了!
1.集合初始化 集合的创建.赋值一步到位,想不想学? 来,上边跟我一起画个 List,在你下边画一个Map-- List list = new ArrayList() {{ add("www ...
- kotlin与Java之间的骚操作:kotlin一键调用java
Kotlin 调用 Java 比如如下 Java 类: public class Person{private String name;private boolean married;private ...
- java 10大常见异常
1. java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不 ...
- [work*] CNN十大骚操作
从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量.我下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作中探讨日 ...
- 雨滴桌面时间插件_电脑桌面美化,我只服这10个骚操作!
文/安哥拉 桌面美化,可能是不少使用 Windows 的人都有过的共同经历,美化的原因可能各不相同,但目的可能是一致的:让桌面更美.更整洁或者更有个性. 这次,我整理了 6 类桌面美化技巧,涉及桌面图 ...
- [转帖]老狼:你知道哪些关于 Windows 10 的骚操作?
作者:老狼 链接:https://www.zhihu.com/question/265781599/answer/579939418 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- 这些图片用真的亮瞎我的双眼了
以下图片是通过g++生产的,感觉很玩的样子 更多图片请看: http://codegolf.stackexchange.com/questions/35569/tweetable-mathematic ...
- Java编程10大低级错误
今天面试时HR问我一个关于数据库性能调优的问题,对于我的回答引发了她的另一个问题:Java 10大低级错误 知不知道?这个在以前公司的时候还真的提过这个问题,但是我实在是...在网上搜了一下,拿来分享 ...
- 盘点世界10大最贵的笔记本电脑 第1名超6000000元
随着电脑的普及,笔记本得到很大的发展空间.笔记本除了功能.外形设计外,最让人关注的还是价格.国外媒体近日就盘点了当今世界最贵的10款笔记本. 随着电脑的普及,笔记本得到很大的发展空间.笔记本除了功能. ...
最新文章
- Attention! .net 持久层正式发布 :Noebe
- Windows 7玩魔兽争霸冰封王座3的解决方法
- 入门Pandas不可不知的技巧
- 程序员技术练级攻略(转载)
- 作用域、执行环境、闭包(四)
- 面向 Web 前端的原生语言总结手册
- GIS数据里的4D数据
- matplotlibpycharm
- PHP json_encode 文本形式数字下标数组导致下标丢失
- CSDN 2020博客之星投票进行中:送你喜爱的博主C位出道!
- oracle 模式_oracle专用模式修改为共享模式
- 如何:让Oracle表及字段显示为区分大小写
- 浏览器中调用Linux程序,一个可以使用浏览器通过ssh连接linux的程序
- oracle 表列统计信息,Oracle中收集表与列统计信息
- Data Matrix of Zint
- HMC5883L指南针罗盘模块连接arduino使用的注意事项
- c语言程序设计超市会员卡管理系统,C语言程序设计课程设计报告超市水果信息管理系统...
- Mac终端输出重定向到剪切板
- python如何截长图_selenium定时爬取长截图
- Lora、zigbee比较