2014-01-08 63 views
0

的類型我有一個包含幾個enumerateds一類,像這樣:獲得特定枚舉

public class MyEnumerateClass 
{ 
    public enum Enum1 
    { 
     enum1Value1, 
     enum1Value2 
    } 

    public enum Enum2 
    { 
     enum2Value1, 
     enum2Value2 
    } 
} 

我有采取任何枚舉的這樣一個方法:

public void GetValue(MyEnumerateClass enumerateField) 
{ 
     switch (enumerateField) 
     { 
      case enum1Value1: 
      ... do stuff here ... 
      break; 
     .......... stuff .......... 
     } 
    } 

我們可以明白,GetValue允許我接受以前聲明的任何兩個值。但我有一個問題:

當我需要檢查枚舉類型,並檢查它是否Enum1Enum2,我不知道該怎麼處理呢?

public void GetType(MyEnumerateClass enumerateField) 
{ 
     enumerateField.values(); // To do this I need to know the type of the enumerate 
} 

所以,我怎麼能獲取枚舉類型如果它在MyEnumerateClass內?

+0

這個問題對我來說真的沒有意義。變量'enumerateField'的類型是'MyEnumerateClass',它只是一個類(儘管聲明瞭一些枚舉)。你不能開啓一個類,此外,在你顯示的片段中,對象甚至不會有任何枚舉類型的字段... –

回答

2

每個枚舉都是它自己的類型(在你的例子中,它們在這方面表現得像靜態內部類)。

要讓一個方法參數允許兩個枚舉,您必須構建一個類型層次結構或將Object作爲參數值。正如你知道你可以接收哪些類型(MyEnumerateClass $ Enum1或MyEnumerateClass $ Enum2),你可以在參數類型上使用instanceof檢查和分支,或者你爲兩個枚舉重載方法。

void GetValue(Object o){ 
    if(o instanceof MyEnumerateClass.Enum1) { 
     switch((MyEnumerateClass.Enum1) o){ 
     case enum1value1: ... 
     } 
    } else if (o instanceof MyEnumerateClass.Enum2) { 
     switch((MyEnumerateClass.Enum2) o){ 
     case enum2value1: ... 
     } 
    } 
} 

class A { 
    void GetValue(MyEnumerateClass.Enum1 value){} 
    void GetValue(MyEnumerateClass.Enum2 value){} 
} 
+0

我看到...非常感謝! – Sonhja

1

Enum就像Class,Interface所以根據我的理解,enum的創建不在課堂內。

public enum Enum1 
    { 
     enum1Value1, 
     enum1Value2 
    } 
    public enum Enum2 
    { 
     enum2Value1, 
     enum2Value2 
    }
然後,您可以創建一個對象並使用枚舉值。你可以參考 What's the use of "enum" in Java?瞭解更多詳情。

1

每種枚舉延伸Enum<?>,這樣你就可以將參數限制爲使用這種類型的枚舉實例。然後用方法裏面的instanceof

public void GetValue(Enum<?> enumerateField) { 
    if (enumerateField instanceof Enum1) { 
     switch (enumerateField) { 
      case enum1Value1: 
       // ... do stuff here ... 
      break; 
      // .......... stuff .......... 
     } 
    } else (enumerateField instanceof Enum2) { 
     // whatever 
    } 
}