Понимание TimeUnit
Я посмотрел в TimeUnit
а также toMillis()
метод.
public long toMillis(long paramLong)
{
throw new AbstractMethodError();
}
toMillis()
метод не делать ничего, кроме как бросить AbstractMethodError
исключение.
Итак, как же toMillis()
метод преобразования секунд, минут и т. д. в миллисекунды?
3 ответа
Откройте TimeUnit и посмотрите константы внутри...
/**
* Time unit representing one thousandth of a microsecond
*/
NANOSECONDS {
public long toNanos(long d) { return d; }
public long toMicros(long d) { return d/(C1/C0); }
public long toMillis(long d) { return d/(C2/C0); }
public long toSeconds(long d) { return d/(C3/C0); }
public long toMinutes(long d) { return d/(C4/C0); }
public long toHours(long d) { return d/(C5/C0); }
public long toDays(long d) { return d/(C6/C0); }
public long convert(long d, TimeUnit u) { return u.toNanos(d); }
int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
},
/**
* Time unit representing one thousandth of a millisecond
*/
MICROSECONDS {
public long toNanos(long d) { return x(d, C1/C0, MAX/(C1/C0)); }
public long toMicros(long d) { return d; }
public long toMillis(long d) { return d/(C2/C1); }
public long toSeconds(long d) { return d/(C3/C1); }
public long toMinutes(long d) { return d/(C4/C1); }
public long toHours(long d) { return d/(C5/C1); }
public long toDays(long d) { return d/(C6/C1); }
public long convert(long d, TimeUnit u) { return u.toMicros(d); }
int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }
},
как вы увидите, каждая константа в перечислителе TimeUnit NANOSECONDS, MICROSECONDS и т. д. реализует анонимные методы, которые дают вам косвенный доступ к toMillis()
поэтому этот метод
public long toMillis(long duration) {
throw new AbstractMethodError();
}
никогда не доступен вашему коду напрямую...
Каждое значение в TimeUnit
в основном это переопределяет. Вы никогда не будете вызывать эту реализацию, потому что у вас никогда нет ссылки на объект типа TimeUnit
- это всегда подкласс, представляющий одно из значений.
Это метод переопределения.
Вы можете увидеть переопределенные реализации в NANOSECONDS, MICROSECONDS и т. Д.