2014-09-10 71 views
-1

我有這些枚舉:加入枚舉在Java中

public interface MyEnum { 
} 

public enum Foo implements MyEnum{ 
    A("Foo_a"), 
    B("Foo_b"), 
    C("Foo_c") 

    private String name = ""; 
    Foo(String name) { 
     this.name = name; 
    } 
    @Override 
    public String toString() { 
     return name; 
    } 
} 

public enum Bar implements MyEnum { 
    A("Bar_a"), 
    B("Bar_b"), 
    C("Bar_c") 
    private String name = ""; 
    Bar(String name) { 
     this.name = name; 
    } 
    @Override 
    public String toString() { 
     return name; 
    } 
} 

我將不得不使用一種方法來加入我的枚舉是這樣的:

join(Foo, A, B) 

或以其他方式(更好):

Foo.join(A, B) 

返回:

"Foo_a, Foo_b" 

我嘗試這樣做:

static String join(MyEnum table, Object ... words) { 
    String joined = words[0].toString(); 
    for(int i = 1 ; i<words.length ; i++) { 
     for(MyEnum.class t : MyEnum.values()) { 
      if (t == words[i]) { 
       joined += ", " + words[i].toString(); 
      } 
     } 
    } 
    return joined; 
} 

但似乎我不能做for(MyEnum.class t : MyEnum.values())

你有什麼想法來實現這種方法嗎?

+1

接口'MyEnum'沒有一個名爲'方法值()'。 – forgivenson 2014-09-10 12:05:24

+0

而不是'MyEnum.values()',你可能的意思是'table.values()' – Joffrey 2014-09-10 12:20:41

+0

另外,你想在這裏實現什麼?你想加入來自不同枚舉的元素嗎? @Jesper的簡單答案似乎就是您在這裏所需要的。如果對你不夠,請更具體。 – Joffrey 2014-09-10 12:22:04

回答

2

您在方法的任何地方都沒有使用參數table,您不需要傳遞它。此外,爲什麼你想循環的枚舉值MyEnum(這是行不通的,因爲接口MyEnum沒有values()方法)?您也可以循環訪問words陣列。

這種簡單的版本適用於任何類型的對象,包括你的枚舉值:

static String join(Object... words) { 
    StringBuilder sb = new StringBuilder(); 

    if (words.length > 0) { 
     sb.append(words[0]); 
     for (int i = 1; i < words.length; i++) { 
      sb.append(", ").append(words[i].toString()); 
     } 
    } 

    return sb.toString(); 
} 
0

我真的只是猜測,但我想你想要做的是加入枚舉成一個單一的字符串表示。所以從枚舉

[Foo.A, Foo.B, Bar.B] 
要創建的字符串

"Foo_a, Foo_b, Bar_b" 

如果是這樣的話

的名單,你需要有在接口常用的方法,這將提供相應的名稱:

此外,您的枚舉必須實現此方法並返回其名稱

public enum Foo implements MyEnum{ 
    @Override 
    public String getName() { 
     return name; 
    } 
} 

然後你可以有你的加入方法:

static String join(MyEnum... words) { 
    if(words == null || words.length == 0){ 
     return ""; 
    } 
    StringBuilder joined = new StringBuilder(words[0].getName()); 
    for(int i = 1 ; i<words.length ; i++) {   
      joined.append(", ").append(words[i].getName()); 
    } 
    return joined.toString(); 
} 
+0

在他的情況下,接口方法是'toString()'。 – 2014-09-10 12:56:36

+0

非常感謝!但不會加入幾種類型的枚舉,即'[Foo.a,Foo.b]'或'[Bar.a,Bar.b]',但從不''[Foo.a,Bar.a]'。我只想知道是否可以在我的連接方法中指定枚舉類型,以便不在每個參數中指定它。 – roipoussiere 2014-09-10 13:09:45

+0

當然,但是他根本不需要接口。它可能會/可能不會濫用toString(),這取決於名稱應該是對象的字符串表示形式。 – 2014-09-10 13:14:42