赣州新闻网

首页 / 科技

Java 10 大装 B 写法,看完可以出去吹牛逼了!

2020-04-07 · 赣州新闻网 · 科技

想不想学习装 B 式的 Java 骚操作花式写法?

没错,一文交会你!

1、集合初始化

集合的创建、赋值一步到位,想不想学?

来,上边跟我一起画个 List,在你下边画一个Map……

Java 10 大装 B 写法,看完可以出去吹牛逼了!

哈哈,高大上的写法,栈长以前写过,写法虽然是很装X,然而并没Y 4 w G z _ X |有什么卵用。

2、算术

Java 10 大装 B 写法,看完可以出去吹牛逼了!

注意到上面size的写法没有?

明明可以写成:

final int size = 256;

他非要写成:

final int size = -(-128) + 127 + 1;v z * a s 1 !  a

这么装 B 的写法来自 JDK 包装类java.lang.Byte里面的K d = , k *静态方法g h 2。

为什么要这么写呢?

这样的写法在 JDK 里面有很多,大家看到这些写法都会觉得很奇怪,Java技术栈微信群里、知识星球里面有曾有粉丝问我这是为什么。

真正缘由无从考察,但栈长我觉得写 JDK 的大神其实就想告诉你,Byte 的 256 个数是由 -128 ~ 127 这个范围组成的,起到一个标识数I 3 b o字范围的作用而已。至少 Byte 为什么取这个范围,为什么byte取值-128~127??N 5 D ? + D这篇文章可以解密。

如果你知道其中的更多道道,欢迎留言分享!

3、移位

Java 10 大装 B 写法,看完可以出去吹牛逼了!

这两个变量来自java.util.HashMap源码,你可能也非常好奇为什么不直接! | v / R ?写成数字,要弄一个移位骚操作?

这是在告诉开发者,HashM) @ G ] 5 $ap 的容量大小必须是 2 的幂次,不然会造成空间浪费。另外,HashMap 容量为什么总是为 2 的次幂?这篇推荐看下。

4、复制变量

Java 10 大装 B 写法,看完可以出去吹牛逼了!

以上同样来自java.util.H a mHashMap? 6 P Q c =的源码,为c l 1什么不直接用values:

Java 10 大装 B 写法,看完可以出去吹牛逼了!

而要重新定义一个vs来绕一个弯s I % ( = s v呢?

这样写不是更简单么?

JDK里面大量这样的写: 4 @ v y , = J %法,这是为什么呢?!

那是因为操作局部变量要比读取全局变量要更快,另外,我个人觉得还有一个好处,再申明7 7 p J ; |一下局部变量,可以很明显的看到这个变量的类型,而不要翻到上面b F ~ # b l f ,或者用鼠标移上去来看变量类型。

另外提一点,上面的复制变量再操作的方式让我想到了CopyOnWriteArrayList,这也是+ ( . & + ( f !让当前_ _ 2 A z # 1变量不被其他线程改变保= N 2 ; . T =证当前线程变量一致性的一种方式。

写 JDK 源码的都是大神啊,透过源码,我们能学到太N ) 4 Y多东西!

5、泛型

来看一段泛型的灵活B V {运用| 6 p 1 p S M:

public <R>+ J 0; Observable<R> compose(TransfR t , % Mormer<? k ` F | o o s G Fsuper&* r Q 7 + =nbsp;T, ? extends R> transformer) {
  &3 * y _ L hnbsp; return ((Transformer<T, R>) transfF 8 $ J Horme| 1 G ) Zr).call(this);
}

这个泛型方法写得牛 X 吧,泛型 T、R、通配符(?)、上边界(extends)和下边界(super)都用上了!

常用的泛k ) B B $ n F型含义:

  • T - Type(类型)
  • R - Result(结果)
  • K - Key(键)
  • V - Value(值)
  • E - Element (元素)
  • N - Number(数字)
  • ? - 不确定类型

上面的泛型我们应该有常见. m h D吧,哈哈。

9、类型推断

关注Java技术栈公众号的老读者应该都看过,Java 10 刚出来的时候9 J O ; R s Q 5 @,我写过两- v ] u t k K T篇新特性文章:

  • Java 10的10个J ( * x k新特性,将彻^ } F底改变你写代码的方式!
  • Java 10 实战第 1 篇:局部变量类型推断

来,我再挑两个示例来欣赏下:

示例1:

var javastack = \"javastack\";

示例2:

private static void testL@ t Q b e p R s Soop() {
   &5 , u l F 0 Hn! 4 k ; ebsp;foU G V v [r (va& q G m t #r i- v o & = 0; i < 3; i++) {
        for (var m = 10; m < 15; m++) {
 &nV F S : Wbsp;          System.out.println(i + m);
       e + o a a; }
    }
}

这样写会不会被打?也太省事了!

类型推断出来后,都说 Java 越来越像 Javascript 了,其实就是 Java 10 增加的一种` U r k : { c f语法糖8 | G ! . z c v而已,在编译期间T a & i m 3 Q a会自动推断实际类型,其编s Z S M bkiddle) {
    & @ ` _ [ m 1// ...
}

匹配后直接创建对象和赋值直接拿来用,不需要再添加强制转换的代* ( k a A D W码,大大提高了可读性和安全性。具体可以看这篇文章:Java 14 之模式匹配,非常赞的一个新特性!

转载|:https://mp.weixin.qq.com/s/WcJh8A8puLIRluqRjHx-kw

Java技术栈

微信公众号文章接口考察推荐动作兴国吹牛牛逼