2008-09-21 43 views
4

我有以下枚舉:如何建立接口,這樣的枚舉

public enum Status implements StringEnum{ 

    ONLINE("on"),OFFLINE("off"); 

    private String status = null; 

    private Status(String status) { 
     this.status = status; 
    } 

    public String toString() { 
     return this.status; 
    } 

    public static Status find(String value) { 
     for(Status status : Status.values()) { 
      if(status.toString().equals(value)) { 
       return status; 
      } 
     } 

     throw new IllegalArgumentException("Unknown value: " + value); 

    } 
} 

是否有可能建立StringEnum接口,以確保每一個枚舉已找到(),toString()和構造函數?

謝謝。

回答

6

這是不可能在一個接口,指定發送構造或靜態方法。對於一個良好的,簡明的解釋,看看這篇文章:No static methods in interfaces

3
  1. 靜態方法能不能在接口中定義
  2. 構造函數不能在接口
  3. toStringjava.lang.Object定義來定義,要求它在界面如果方法未定義,則不會導致編譯錯誤。

你爲什麼仍要執行構造函數?你不能創造反正的enum在運行期新實例(除非通過也許一些反射機制)。

4

枚舉已經有valueOf()(您的查找方法)方法。和「的toString()」是一個java.lang.Object繼承的方法,所以,每類將有一個,換句話說,你不能強迫它!我看不到執行構造函數的價值,因爲不同的枚舉可能有不同的初始化。

親切的問候