我有一个类为我的应用程序声明常量
public class GroupConstants {
..
public static final int INTEGER_VALUE = 1;
public static final int LONG_VALUE = 2;
public static final int STRING_VALUE = 3;
..
}在代码中有一组switch语句
private static Object getValue(String stringValue, Parameter parameter) throws InvalidPatternException
{
Object result=null;
switch (parameter.getDataType())
{
case GroupConstants.STRING_VALUE: // String value
result=stringValue;
break;
case GroupConstants.INTEGER_VALUE: // Long value
case GroupConstants.LONG_VALUE:
case GroupConstants.BOOLEAN_VALUE:
case GroupConstants.DATE_VALUE:
..
}我想重构int常量值来由enum表示
public enum DataType {
UNKNOWN_VALUE(0,"unknown"),
INTEGER_VALUE(1,"integer"),
LONG_VALUE(2,"long"),
STRING_VALUE(3,"string"),
BOOLEAN_VALUE(4,"boolean"),
..
}所以我的代码可能看起来像这样
@Deprecated
public static final int INTEGER_VALUE = DataType.INTEGER_VALUE.getId();和加班我可以改变我的开关语句。当我将静态最终int引用更改为指向枚举时,所有的switch语句都会中断。
[javac] /home/assure/projects/tp/main/src/a/b/c/DDDDDManagerBean.java:1108: constant expression required
[javac] case GroupConstants.INTEGER_VALUE:
[javac] ^
[javac] /home/assure/projects/tp/main/src/a/b/c/ParameterComponent.java:203: constant expression required
[javac] case GroupConstants.INTEGER_VALUE:
[javac] ^
[javac] /home/assure/projects/tp/main/src/a/b/c/ParameterComponent.java:268: constant expression required
[javac] case GroupConstants.INTEGER_VALUE:
[javac] ^
[javac] /home/assure/projects/tp/main/src/a/b/c/ParameterComponent.java:316: constant expression required
[javac] case GroupConstants.INTEGER_VALUE:
[javac] ^
[javac] /home/assure/projects/tp/main/src/a/b/c/ParameterComponent.java:436: constant expression required
[javac] case GroupConstants.INTEGER_VALUE:我不想被迫改变所有的开关,所以它有一个干净的工作?