在Java 中云里雾里转圈圈 ?范型 构造枚举

晕晕的过程

最近从写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一起跟进!

推荐阅读更多精彩内容

  • pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 ...
    王震阳阅读 88,901评论 26 538
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 84,336评论 14 122
  • Java 8 lambda 表达式10个示例 Java 8 发布于4年前,日期是2014年3月18日,这次开创性的...
    认真期待阅读 723评论 2 6
  • 《醉翁亭记》是北宋欧阳修的名作,“醉翁之意不在酒,在乎山水之间也。山水之乐……”这名句想必是人人都知晓的。 如...
    Beliver阅读 26评论 0 0
  • 北方连续几天的暴雨,石家庄橙色暴雨预警,赞皇这个很渺小很贫困的山区 ,96年的大水,我记得不是特别清楚,16年的水...
    当你真正爱自己阅读 100评论 0 1