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>时,已经能限制 不同类之间不同比较大小 了。

  • 相关阅读:
    AttributeError: module 'scipy.misc' has no attribute 'imread'
    3.形态学
    2.几何变换_图像金字塔
    ValueError:Object arrarys cannot be loaded when allow_pickle=False
    2.几何变换_切分合并通道
    2.几何变换_遮挡
    49. Group Anagrams
    151. Reverse Words in a String
    242. Valid Anagram
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/musecho/p/15309810.html
Copyright © 2011-2022 走看看