美文网首页
Effective Java - 用接口模拟可扩展的枚举

Effective Java - 用接口模拟可扩展的枚举

作者: DZQANN | 来源:发表于2022-07-03 22:59 被阅读0次

    第37条 用EnumMap代替序数索引

    1. Java提供了EnumMap,在使用枚举作为key的时候可以用这种Map。底层使用了枚举的ordinal方法,本质上是IntegerEntry,所以效率会比较高

    2. 一般创建Map很多时候都会用StreamStream的默认创建Map的类型是HashMap,可以使用这种方式创建出EnumMap

      Arrays.stream(garden)
          .collect(Collectors.groupingBy(e -> e.lifeCycle, () -> new EnumMap<>(LifeCycle.class), Collectors.toSet()));
      

    思考

    1. 作者在书中举的例子中使用了Map<Enum1, Map<Enum2, Enum3>的结构,我们的正常开发中是不推荐使用Map的,理由就是不能表示key和value的意义,尤其是嵌套的Map。这里使用了嵌套的理由可能是,本身枚举和String不一样,枚举已经能够表示一定的意义了
    2. EnumMap本身没有太多值得看的,不过由于一般的Map构造都是通过Stream,可以让我们间接多研究下collect方法是怎么组装结果的,怎么自定义collect方法

    第38条 用接口模拟可扩展的枚举

    1. 枚举本身是不能继承的,如果想要扩展的话可以让枚举实现接口
    2. 虽然无法编写可扩展的枚举类型,却可以通过编写接口以及实现该接口的基础枚举类型,对它进行模拟。这样允许客户端编写自己的枚举来实现接口。

    思考

    枚举实现接口看起来非常奇怪,仔细想想也是有使用的场景的,这可以适用于"一组接口的实现",比如Excel下载的时候,需要一组Vo->String的实现,这时候就可以使用这种形式。

    相关文章

      网友评论

          本文标题:Effective Java - 用接口模拟可扩展的枚举

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