2012-06-13 49 views

回答

2

您可以擁有它們,但是您應該定義構造函數,其中需要使用Stringboolean作爲參數。

public enum Constants { 

CONSTANT_STRING1("CONSTANT_VALUE1"), 
CONSTANT_STRING2("CONSTANT_VALUE2"), 
CONSTANT_STRING3("CONSTANT_VALUE3"); 
CONSTANT_FLAG1(false); 
CONSTANT_FLAG2(true); 

private String constants; 
private boolean flag; 

private Constants(String cons) { 
this.constants = cons; 
} 

private Constants(boolean lFlag) { 
this.flag= lFlag; 
} 
} 
0

這聽起來像你正在使用枚舉來存儲常量,這是不好的做法。

+0

是,據我閱讀(糾正我,如果我錯了)字段是公共靜態最後,這意味着我們正在創建常量 – daydreamer

+0

枚舉是枚舉值(月,行星等)。如果你的值是沒有共同之處的常量,你不應該將它們存儲爲枚舉,而應該將它們存儲爲常量常量。 –

+0

是的,有些人決定將他們的「公共靜態最終字符串HTML_ELEM_IMG =」「」類型變量並在枚舉中重做它們,這是錯誤的。 –

-2

您可以在枚舉中有兩個不同的構造函數,但這意味着您需要有兩個字段(其中一個未設置)。我認爲這不會有多大意義。

public enum Fields { 
    a("A"), b("B"), c("C"), d(true), e(false); 

    Fields(String str) { 

     strval = str; 
     value = false; 

    } 

    Fields(boolean val) { 

     strval = null; 
     value = val; 

    } 

    private final String strval; 
    private final boolean value; 

} 

編輯***現在編譯。你必須同時初始化兩者。

+0

僅供參考,不要這樣做,這不是什麼枚舉...... –

+0

@RockyTriton,正好。這是沒有道理的。 – jn1kk

+0

代碼不能編譯。你必須初始化一個'final'成員變量。 – matsev

0

這是可能的,但我會建議反對它。在大多數情況下,你真正想要的是一個通用接口,它由兩個(或更多)不同的類來實現。

也請注意,是完全合法的枚舉實現一個接口,但你很少看到兩個枚舉實現像在下面的例子中相同的接口:

public interface Fields { 
} 


public enum StringFields implements Fields { 

    A("A"), 
    B("B"), 
    C("C") 

    private StringFields(String str) { 
     this.str = str; 
    } 

    private final String str; 
} 


public enum BooleanFields implements Fields { 

    D(true), 
    E(false); 

    private BooleanFields(boolean val) { 
     this.val = val; 
    } 

    private final boolean val; 
}