2016-10-05 31 views
3

我看了一下TimeUnittoMillis()的方法。瞭解TimeUnit

public long toMillis(long paramLong) 
{ 
    throw new AbstractMethodError(); 
} 

toMillis()方法做無非拋出一個異常AbstractMethodError等。

那麼,toMillis()方法如何將秒,分鐘等轉換爲毫秒?

+0

TimeUnit基本上是抽象原型。您需要查看具體的'TimeUnits',例如'TimeUnit.SECONDS' – rethab

回答

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每一個常數 納秒,MICROSECONDS等實現匿名,讓你間接訪問toMillis()因此這種方法方法

public long toMillis(long duration) { 
     throw new AbstractMethodError(); 
    } 

永遠不會被您的代碼直接訪問...

+0

我看到了JDK中的覆蓋方法,但是當我使用反編譯器從JRE反編譯'TimeUnit'時。重寫方法不存在。爲什麼會發生? –

7

基本上,TimeUnit中的每個值都會覆蓋它。您永遠不會調用該實現,因爲您永遠不會引用TimeUnit類型的對象 - 它始終是表示其中一個值的子類。

2

這是方法重寫。

你可以看到在納秒,微秒overrided實現等