code: @Override
      public int compareTo(D date) {
  
          Class<?> t1 = this.getChronology().getChronoType();
          Class<?> t2 = date.getChronology().getChronoType();
  
          if (t1 != t2) {
              throw new ClassCastException(
                  "Cannot compare different types of dates, "
                  + "use instance of EpochDays as comparator instead.");
          }
  
          return this.compareByTime(date);
  
      }
docs: /*[deutsch]
  <p>Definiert eine totale respektive eine nat&uuml;rliche Ordnung. </p>
  
  <p>Diese Implementierung wertet die zeitliche Position auf dem
  gemeinsamen Zeitstrahl aus, also die Epochentage. Nur Datumsobjekte
  gleichen Kalendertyps k&ouml;nnen miteinander verglichen werden.
  Die Sortierung ist daher konsistent mit {@code equals()}, solange
  Subklassen nicht weitere Zustandsattribute definieren. Sollen garantiert
  Datumsobjekte verschiedenen Typs nur zeitlich verglichen werden, kann
  entweder eine {@code EpochDays}-Instanz als {@code Comparator}
  oder eine der {@code Temporal}-Methoden {@code isAfter()},
  {@code isBefore()} und {@code isSimultaneous()} verwendet werden. </p>
  
  @throws  ClassCastException if there are different date types
  @see     EpochDays#compare(ChronoDisplay, ChronoDisplay)
  @see     #isBefore(CalendarDate)
  @see     #isAfter(CalendarDate)