después de la modificación del método en la clase calendario para regresar verdadera cuando es mayor que igual a en lugar de estrictamente mayor

anon0808:
import java.util.Calendar;
import java.util.Date;

public class exercise4 {
    public static void main (String[] args) throws InterruptedException {
    Calendar cal1 = new CalendarSubclass();
    cal1.setTime(new Date());
    Thread.sleep(1000);
    Calendar cal2 = new CalendarSubclass();
    cal2.setTime(new Date());
    System.out.println(cal2.after(cal1));
    System.out.println(cal1.after(cal2));
    System.out.println(cal1.after(cal1));
    System.out.println(cal2.after(cal2));
    }
}

class CalendarSubclass extends Calendar {
    @Override
    public boolean after(Object when) {
        if (when instanceof Calendar && super.compareTo((Calendar) when) == 0) {
        //if (when instanceof Calendar && ((Calendar) when).toString().equals(this.toString())) {
        //if (when instanceof Calendar && equals((Calendar) when)) {        
        //          System.out.println("lala");
            return true;
        }
        return super.after(when);
    }
@Override
public int compareTo(Calendar anotherCalendar) {
    return compareDays(this.getFirstDayOfWeek(), anotherCalendar.getFirstDayOfWeek());
}

private int compareDays(int currentFirstDayOfWeek, int anotherFirstDayOfWeek) {
    return (currentFirstDayOfWeek > anotherFirstDayOfWeek) ? 1
            : (currentFirstDayOfWeek == anotherFirstDayOfWeek) ? 0 : -1;
}

}

La salida es:

false, false, true, true 

pero debe ser

true, false, true, true 

ya que tengo overrode el método que utiliza después CalenderSubclass.

Editar: Cuando he eliminado el método compareTo y compareDays funciona, pero sólo se me permite modificar el método después!

Thomas Solicitante:

Con su actualización puedo ver lo que causa el problema:

El overriden compareTo(Calendar anotherCalendar)es una aplicación válida para el Calendar.compareTométodo. La documentación de los Calendar.compareTo()estados de método:

Compara los valores de tiempo [..] representados por dos objetos de calendario.

Sin embargo, el reemplazo de métodos claramente hace algo más (que compara el campo "FirstDayOfWeek", que sólo tiene sentido para Calendarlas instancias configuradas para diferentes lugares.)

Si usted puede: huir y buscar refugio de dicho código roto!


Si no se puede: reimplementar lo que el calendarios originales compareTohace método:

@Override
public boolean after(Object when) {
    if (when instanceof Calendar) {
        Calendar other = (Calendar) when;
        return getTimeInMillis() >= other.getTimeInMillis();
    }
    return super.after(when);
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373000&siteId=1
Recomendado
Clasificación