2014-04-15 119 views
1

常数在以下给出enum使用枚举在Java中

enum StringConstatns { 
    ONE { 
      @Override 
      public String toString() { 
       return "One"; 
      } 
     }, 

    TWO { 
      @Override 
      public String toString() { 
       return "Two"; 
      } 
     } 
} 

public final class Main { 

    public static void main(String... args) { 
     System.out.println(StringConstatns.ONE + " : " + StringConstatns.TWO); 
    } 
} 

可被访问,就像StringConstatns.ONEStringConstatns.TWO


我有以下enum表示int常数(一个或多个)。

public enum IntegerConstants 
{ 
    MAX_PAGE_SIZE(50); 
    private final int value; 

    private IntegerConstants(int con) { 
     this.value = con; 
    } 

    public int getValue() { 
     return value; 
    } 
} 

这需要访问像IntegerConstants.MAX_PAGE_SIZE.getValue()这样的常数值。

这个enum可以以某种方式修改:value可以像IntegerConstants.MAX_PAGE_SIZE那样访问,如第一种情况所示?

+3

'的toString()'被称为自动每次你在一个字符串拼接的对象,这就是为什么你不需要明确地调用它。 – helderdarocha

+0

你可以在你的'IntegerConstants'中添加一个'toString()',但它会返回字符串当然。 – helderdarocha

回答

4

答案是否定的,你不能。你必须调用:

IntegerConstants.MAX_PAGE_SIZE.getValue() 

如果你真的想要一个快捷方式,你可以某处定义常量是这样的:

public class RealConstants { 
    final public static int MAX_PAGE_SIZE = 50; 
} 
public enum IntegerConstants 
{ 
    MAX_PAGE_SIZE(RealConstants.MAX_PAGE_SIZE);//reuse the constant 
    private final int value; 

    private IntegerConstants(int con) { 
     this.value = con; 
    } 

    public int getValue() { 
     return value; 
    } 
} 
2

这是行不通的,因为你的第一个例子确实给.toString()隐含调用当你将它们与+连接在一起,而没有隐式转换为int这是你的第二个例子所需要的。

你可以将它们定义为static final领域,这样做你正在寻找什么:

public class IntegerConstants { 
    public static final int MAX_PAGE_SIZE = 50; 
}