了解时间单位
Understanding TimeUnit
我查看了 TimeUnit
和 toMillis()
方法。
public long toMillis(long paramLong)
{
throw new AbstractMethodError();
}
toMillis()
方法除了抛出 AbstractMethodError
异常外什么都不做。
那么,toMillis()
方法如何将秒、分等转换为毫秒?
TimeUnit
中的每个值基本上都会覆盖它。您永远不会调用该实现,因为您永远不会引用 TimeUnit
类型的对象 - 它始终是代表其中一个值的子类。
这是方法覆盖。
您可以在 NANOSECONDS、MICROSECONDS 等中看到覆盖的实现
打开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
和 toMillis()
方法。
public long toMillis(long paramLong)
{
throw new AbstractMethodError();
}
toMillis()
方法除了抛出 AbstractMethodError
异常外什么都不做。
那么,toMillis()
方法如何将秒、分等转换为毫秒?
TimeUnit
中的每个值基本上都会覆盖它。您永远不会调用该实现,因为您永远不会引用 TimeUnit
类型的对象 - 它始终是代表其中一个值的子类。
这是方法覆盖。
您可以在 NANOSECONDS、MICROSECONDS 等中看到覆盖的实现
打开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();
}
您的代码永远不会直接访问...