在Java SE 7(最可能是在以前的版本)的枚舉類被聲明如下:Enum.valueOf(String)方法來自哪裏?
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, Serializable
的枚舉類有與此簽名靜態方法:
T static<T extends Enum<T>> valueOf(Class<T> enumType, String name)
但有沒有靜態方法:在Enum類中定義的valueOf(String)
也不在Enum所屬的層次結構中。
問題是valueOf(String)
從何而來? 它是該語言的一個功能,即編譯器中內置的功能?
在Enum類的一組方法中不包含此方法的原因是,在編譯時,當返回的Enum值已知(即:由該類定義的類型的枚舉對象程序員)。 不過,另一種方法是將其實際聲明爲Enum類中的抽象方法,並讓編譯器在編譯時提供實現。當然,這意味着它也可以被用戶覆蓋,但編譯器也可以處理這種情況。 在課堂上使用這種方法看起來更自然! – Razvan 2012-08-11 13:15:46
@Razvan靜態方法不能在Java中抽象(或者大多數其他語言,我想)。 – sepp2k 2012-08-11 13:20:09
我沒有說靜態抽象! – Razvan 2012-08-11 15:52:11