2014-04-15 117 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; 
}