我看了一下TimeUnit
和toMillis()
的方法。瞭解TimeUnit
public long toMillis(long paramLong)
{
throw new AbstractMethodError();
}
toMillis()
方法做無非拋出一個異常AbstractMethodError
等。
那麼,toMillis()
方法如何將秒,分鐘等轉換爲毫秒?
我看了一下TimeUnit
和toMillis()
的方法。瞭解TimeUnit
public long toMillis(long paramLong)
{
throw new AbstractMethodError();
}
toMillis()
方法做無非拋出一個異常AbstractMethodError
等。
那麼,toMillis()
方法如何將秒,分鐘等轉換爲毫秒?
打開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每一個常數 納秒,MICROSECONDS等實現匿名,讓你間接訪問toMillis()
因此這種方法方法
public long toMillis(long duration) {
throw new AbstractMethodError();
}
永遠不會被您的代碼直接訪問...
我看到了JDK中的覆蓋方法,但是當我使用反編譯器從JRE反編譯'TimeUnit'時。重寫方法不存在。爲什麼會發生? –
基本上,TimeUnit
中的每個值都會覆蓋它。您永遠不會調用該實現,因爲您永遠不會引用TimeUnit
類型的對象 - 它始終是表示其中一個值的子類。
這是方法重寫。
你可以看到在納秒,微秒overrided實現等
TimeUnit基本上是抽象原型。您需要查看具體的'TimeUnits',例如'TimeUnit.SECONDS' – rethab