在Java 中云里雾里转圈圈 ?范型 构造枚举
2018-07-31 本文已影响0人
那只媛
晕晕的过程
最近从写SQL转战写Java了(姑且这么说,因为不写线上业务,其实还是写的很low的代码)。
上来的难点就是看着同事们的代码云里雾里,对我来说有几个难点:
- 范型的使用
同事代码的有基础的公共包,里边用到了大量的范型,具体的抽象层面的思想其实我是可以看得懂的,但是在具体实际的应用时还是有些懵,
如:一个接口声明成interface A<T>{}
,可是为啥子类implements的时候变成了class B implements A<?>{}
?
这又是啥鬼。。。 - 枚举的使用
在之前我对枚举的使用仅限于enum A{INFO1,INFO2}
的层面,以为能用它罗列几个值就可以了。当看到
public enum config implements A<?> {
INFO1(Sring.class),
INFO2(Integer.class);
config(String info);
config(Integer info)
}
这种带多个构造函数的枚举使用,且枚举的成员不只是一个简单的值类型之后,彻底对以前说自己熟练掌握Java的说法感叹虚啊。
- lambda表达式
其实本质上是函数式编程,思想不难理解,可是当看到代码里一堆 "->"的Consumer类型表达时,彻底崩了,因为这样写真的不好理解代码呀,不如写个匿名类的形式来的直接。抱怨归抱怨,还是要学的。看了Consumer和几个常见的容器类,从Iterable、Collection、List、Map、ArrayList、Collector一层层看,再根据代码中使用了Stream的例子,看Consumer怎么在类里传递的,算是理解了一点点。 - Stream的使用
同事代码中Stream真的是用的各种纯熟,再配上lambda表达式确实溜到飞起,Array、List、Map转换自如,再配上里边的reduce方法,适合做一些从数据的转换操作,举个例子:
public void compute(List<Performance> listPerfs) {
listPerfs.stream().map(obj -> obj.getPv()).reduce(0L, (a, b) -> a + b);
}
这个代码的功能就是实现listPerfs中对象Pv成员变量的累加操作,确实代码比循环简洁了很多,可是要看懂对于生手真的不容易,只能跑去看reduce函数的介绍
Stream中reduce的注释.png
其中的accumulator参数是个BinaryOperator<T>
,在这个例子里就是加法了。
后记
修炼了2年SQL之后,回头来学Java虽然觉得吃力,但是觉得踏实了些,SQL会继续写,Java一起跟进!