zoukankan      html  css  js  c++  java
  • Enum<E extends Enum<E>>

    Enum<E extends Enum<E>>

    参考:https://segmentfault.com/a/1190000038778953

    不理解为什么Enum的泛型要写成<E extends Enum<E>>,看了这篇解读就明白了。


    简单地说就是:有一个基类CustomEnum,两个子类ColorWeekDay。两个子类可以同类比较大小(同为Color类型的实例之间比较,同为WeekDay类型的实例之间比较),但不同类(Color类型和WeekDay类型)不应该能比较。

    为了达成这个目的,所以基类写成了CustomEnum<E extends CustomEnum<E>>


    • 基类CustomEnum

      public abstract class CustomEnum<E extends CustomEnum<E>> implements Comparable<E> {
      
          protected final String name;
          protected final int ordinal;
      
          protected CustomEnum(String name, int ordinal) {
              this.name = name;
              this.ordinal = ordinal;
          }
      
          public final String name() {
              return name;
          }
          public final int ordinal() {
              return ordinal;
          }
      
          @Override
          public int compareTo(E o) {
              return ordinal - o.ordinal;
          }
      }
      
    • Color

      public class Color extends CustomEnum<Color> {
      
      
          public Color(String name, int ordinal) {
              super(name, ordinal);
          }
      }
      
    • WeekDay

      public class WeekDay extends CustomEnum<WeekDay> {
      
          public WeekDay(String name, int ordinal) {
              super(name, ordinal);
          }
      
      }
      
    • 测试

      public class ParamUpperBound {
          public static void main(String[] args) {
              Color red = new Color("red", 0);
              Color green = new Color("green", 1);
              WeekDay monday = new WeekDay("monday", 2);
      
              red.compareTo(green);
              monday.compareTo(red);
          }
      }
      


    不过,我测试下来和参考文章有些出入。

    我的基类写成CustomEnum<E extends CustomEnum>时,已经能限制 不同类之间不同比较大小 了。

  • 相关阅读:
    mysql数据索引
    JQuery学习
    (原创)JAVA多线程一传统多线程
    JAVA常用的XML解析方法
    java集合比较
    Hibernate总结3
    Hibernate总结4之HQL
    HDU5716, HDU5745【dp+bitset】
    Can of Worms 【迭代/线段树】
    CSU 1802 小X的战斗力【拓扑dp】
  • 原文地址:https://www.cnblogs.com/musecho/p/15309810.html
Copyright © 2011-2022 走看看