2013-04-04 54 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