2013-04-04 53 views
1

我與Java初學者(Objective-C的是我最知名的語言),我真的很努力找到的我想要實現一個清晰的例子:Java的枚舉和嵌套類

public class OuterClass extends ClassToExtend { 

    public enum Enum { value1, value2 } 

    public class InnerClass extends AnotherClassToExtend { 

     public void aMethod(int position) { 
      switch (position) { 
       case Enum.value1: 
        //Do something 
       case Enum.value2: 
        //Do Something else 
      } 
     } 
    } 
} 

顯然這不起作用(對枚舉的引用),但應該給我想要做什麼的想法,什麼需要改變,使這項工作? 我想我需要聲明枚舉的某處引用它?

我將很感激解釋糾正,以便我可以學習,並希望在未來爲自己解決類似的困難。

感謝

編輯:如果有什麼方法的@覆蓋和簽名不能改變?

+0

FOA變化類型從int到枚舉,因爲你定義它,你應該使用它。對於交換機,只需使用案例值1:和案例值2。 – BigMike 2013-04-04 15:02:37

回答

3

首先,你必須在枚舉本身切換,因此您需要更改以下行:

public void aMethod(int position) { 

接受喲ur enum而不是int。其次,枚舉的值需要在交換機中直接引用,因爲枚舉已經在當前對象的範圍內。從抽象類

public class OuterClass extends ClassToExtend { 

    public enum Enum { value1, value2 }; 

    public class InnerClass extends AnotherClassToExtend { 

     public void aMethod(Enum position) { 
      switch (position) { 
       case value1: 
        //Do something 
       case value2: 
        //Do Something else 
      } 
     } 
    } 
} 
+0

精確複製而發佈的答案^^第一次其實我看到這樣的事情在這裏就這樣! +1因爲是非常相同的答案我打字 – BigMike 2013-04-04 15:06:30

+0

@ david99world我的意思是我得到了一個「精確複製的答案」,而張貼我的答案(所以我決定不將它張貼和+1你^^) – BigMike 2013-04-04 15:09:01

+0

啊我的道歉,我想你的意思是和當前的答案一樣。 – david99world 2013-04-04 15:09:48

2

您無法打開int,然後嘗試將其與enum匹配。

如果你改變你的方法簽名

public void aMethod(Enum position) 

,並使用裸枚舉值(例如value1),那麼它應該工作:

case value1: 
+0

@ david99world你是對的。我會糾正我的答案。 – 2013-04-05 06:01:07

2

覆蓋需要與INT paramater

的方法,我會做這樣的:

public enum Enum { value1, value2 } 
public class InnerClass { 
    public void aMethod(int position) { 
    Enum value = Enum.values()[position]; 
    switch (value) { 
     case value1: 
+0

如果該方法是從需要與INT paramater方法一個抽象類替代時,這會是優選的解決方案? – amcc 2013-04-04 15:12:51

+0

@Vanthel看到更新 – NimChimpsky 2013-04-04 15:24:34

+0

謝謝你,這實際上解決了我的具體問題,但由於我措辭,我的問題的方式,接受的答案可能是更容易接受。 – amcc 2013-04-04 16:06:56

0

您的amethod方法應該不是int作爲參數類型使用。 在JDK6之前,還無法在Switch語句中使用字符串。在Java SE 7中已經實現了使用String情況的開關語句,至少在第一次請求後16年。

你也應該不會忘記每一個案件進行break語句。否則,您的所有案件將被閱讀。

public void aMethod(Enum position) { 
switch (position) { 
       case value1: 
        System.out.println("I am Value 1"); 
        break; 
       case value2: 
        System.out.println("I am Value 1"); 
        break; 
} 
} 

進行測試,使用位置參數的

ob.aMethod(Enum.value1); 

ob.aMethod(Enum.valueOf("value1")); 
+0

我的意圖不是使用字符串作爲案例,而是爲枚舉的value1引用整數作爲它的索引被陳述了,即value1 = int 0等 – amcc 2013-04-04 16:03:13