2015-11-27 132 views
-6

我目前正在编写一个代码,我在下面使用枚举。枚举不初始化正确的值

public enum ConditionCode { 
    EQ, SEQ, NE, SNE, CS, SCS, HS, SHS, CC, SCC, LO, SLO, MI, SMI, PL, SPL, VS, SVS, VC, 
    SVC, HI, SHI, LS, SLS,GE, SGE, LT, SLT, GT, SGT, LE, SLE, SAL, AL 
} 

我想枚举ConditionCode.ALS,并打印出来,并通过做比较,AL这个

public static void main(String[] args) { 
    ConditionCode sal = ConditionCode.SAL; 
    System.out.print(sal.toString + " "); 
    System.out.println(sal.compareTo(ConditionCode.AL) == 0); 
} 

我感到奇怪的是,这个命令打印AL,而不是SAL false,它同样为所有其他枚举例如

public static void main(String[] args) { 
    ConditionCode cc = ConditionCode.CC; 
    System.out.print(cc.toString + " "); 
    System.out.println(cc.compareTo(ConditionCode.AL) == 0); 
} 

还将打印AL而不是CC false。我能知道它为什么这样做吗?而且,我该如何解决它?

+5

您的代码无法编译。它会失败'sal.toString'(parens失踪)。 – fge

+0

它会因为它会使用java.Lang.Enum.toString(),如果你必须改变枚举的输出,例如,如果你想让你所有的类的枚举打印'S',你必须覆盖函数toString类似于'public String toString(){return'S'; }'否则默认的toString就是'public String toString(){return super.toString(); }' –

回答

2

这个程序http://ideone.com/uXiIj8打印效果与预期

public static void main (String[] args) throws java.lang.Exception 
{ 
    { 
     ConditionCode sal = ConditionCode.SAL; 
     System.out.print(sal + " "); 
     System.out.println(sal.compareTo(ConditionCode.AL) == 0); 
    } 
    { 
     ConditionCode sal = ConditionCode.CC; 
     System.out.print(sal + " "); 
     System.out.println(sal.compareTo(ConditionCode.AL) == 0); 
    } 
} 

public enum ConditionCode { 
    EQ, SEQ, NE, SNE, CS, SCS, HS, SHS, CC, SCC, LO, SLO, MI, SMI, PL, SPL, VS, SVS, VC, 
    SVC, HI, SHI, LS, SLS,GE, SGE, LT, SLT, GT, SGT, LE, SLE, SAL, AL 
} 

打印

SAL false 
CC false 

我可以知道为什么它这样做?而且,我该如何解决它?

您很可能在更改代码并重新编译程序之前运行它,或者您正在运行与您认为自己的程序不同的程序。我会确保你的IDE设置正确,在运行之前重新编译你的程序,如果显示正常,可能重新启动它。

+1

谢谢你的回答,但我发现问题出在我的代码中,我只是没有在我的函数中传递正确的参数 –