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

  • 相关阅读:
    D
    NOI 1.7编程基础之字符串(35题)
    HYSBZ 2145 悄悄话
    POJ 2406 Power Strings
    POJ 3461 Oulipo[附KMP算法详细流程讲解]
    POJ 3974 Palindrome
    POJ 1002 487-3279
    POJ 1182 食物链
    POJ 2524 Ubiquitous Religions
    HDU 1251 统计难题
  • 原文地址:https://www.cnblogs.com/musecho/p/15309810.html
Copyright © 2011-2022 走看看