2015-04-02 41 views
0

我是新的JAVA投obejct來枚舉JAVA

我只知道myEnum實現遍歷myEnum.values()具體interface 讓我們假設我有接口statsInterface 我有一個實現此接口的幾個枚舉

enum statsfromMachine1 
enum statsfromMachine2 
.. 

後來我想重複一遍。 我在想什麼的就像是

public void interfaceEnumImplParser (statsInterface _interface ,object _myinterfaceImplEnum, string Input) { 
    for ((_interface)_myinterfaceImplEnum iterable_element : _myinterfaceImplEnum.values()) { 
     //do stuff here 
    } 
} 

,但我失去了一些東西,它甚至不會編譯 財產以後是否有可能呢?

+3

**對你的代碼的附註**:你一再違反了java的命名約定。接口應該是Camel的情況,所以它是StatsInterface;我不確定你是否真的想說「對象」。爲了幫助你的問題;請也出現錯誤信息。 – GhostCat 2015-04-02 08:51:56

+0

@EddyG謝謝你的評論我會編輯它 – LordTitiKaka 2015-04-02 09:19:53

+1

另一個問題:你爲什麼使用枚舉來實現接口?也許我們應該退一步,然後嘗試解釋**爲什麼**你認爲你的設計應該看起來像這樣。 – GhostCat 2015-04-02 09:21:25

回答

1

看起來像你想在迭代中直接將enum轉換爲接口類型。如果這是真的,那麼你應該修改你的代碼到這樣的東西。

public void interfaceEnumImplParser (statsInterface _interface ,object _myinterfaceImplEnum, string Input) { 
    for (_interface iterable_element : _myinterfaceImplEnum.values()) { 
     //do stuff here 
    } 
} 

希望有幫助。

1

我寫了一個小樣本,可以幫助您找到多個枚舉的通用實現邏輯。

interface Doable<B>{ 
    B doStuff(Number a); 

    String getCategory() 
} 


enum StatsFromMachine1 implements Doable<String> { 
    ABC{ 

     @Override 
     public String doStuff(Number a) {    
      return Integer.toString(a.intValue() + 3); 
     } 

    }; 

    @Override 
    public String getCategory() { 
     return "S1"; 
    } 
} 

enum StatsFromMachine2 implements Doable<String>{ 
    X(1.4), Y(2.86), Z(0.1); 

    private Double d; 

    @Override 
    public String doStuff(Number x) { 
     return Double.toString(x.doubleValue() * this.d); 
    } 

    private StatsFromMachine2(Double d) { 
     this.d = d; 
    } 

    @Override 
    public String getCategory() { 
     return "S2"; 
    } 
} 

當枚舉實現相同的接口時,很容易編寫適用於所有接口的代碼。實際上,這種抽象並不關心,實現是由枚舉還是其他的東西給出的。

public static String doStuffWithEnums(){ 
    Collection<Doable<String>> collection = Arrays.asList(StatsFromMachine1.values()); 
    collection.addAll(Arrays.asList(StatsFromMachine2.values())); 

    StringBuilder sb = new StringBuilder(); 

    for(Doable<String> d : collection){ 
     sb.append(d.doStuff(5.0)); 

     if(d.getCategory().equals("S1")){ // alternatively use an instanceOf check 
      sb.append(((StatsFromMachine1)d).name()); 
     } 
    } 
    return sb.toString(); 
} 
1

OK我已經想通了 謝謝你的幫助,你會得到+1後,我檢查你的內容:) 所以基本上我有enum E1實現interface I1 遍歷enum成員「一般「我做的是:

public static void parse_log_with_enum(I1 ... Is) 
{ 
    for (I1 i1 : Is) { 
     // do something with i1 
    } 
}