美文网首页
在Java 中云里雾里转圈圈 ?范型 构造枚举

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

作者: 那只媛 | 来源:发表于2018-07-31 17:57 被阅读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一起跟进!

    相关文章

      网友评论

          本文标题:在Java 中云里雾里转圈圈 ?范型 构造枚举

          本文链接:https://www.haomeiwen.com/subject/jqbhvftx.html