1
以下代碼正常工作,其中PROCESS_UPDATES是一個常量。錯誤:「屬性值必須是常量」。我可以在編譯時從枚舉中構造一個常量嗎?
public static final String PROCESS_UPDATES = "ProcessUpdates";
public static final String PROCESS_UPDATES = "ProcessSnapshots";
// etc....
@Produce(uri = "seda:" + MyClass.PROCESS_UPDATES)
protected ProducerTemplate processUpdatesTemplate;
但是爲了避免遍佈整個地方的十億個常量字符串,我正在試驗一個枚舉設計模式。
public enum Route { ProcessUpdates, ProcessSnapshots }
在大多數情況下,我可以寫"seda:" + Route.ProcessSnapshots
,它看起來更整潔。
但是我的可靠測試代碼現在失敗了,因爲註釋中的uri必須是常量。
@Produce(uri = "seda:" + MyClass.Route.ProcessUpdates) // compiler error
protected ProducerTemplate processUpdatesTemplate;
錯誤:Attribute value must be constant
。
事情是,那Route.ProcessUpdates.toString()
種「is」是一個常量,但編譯器不會這樣看。
我讀了about constants and annotations但我沒有看到任何答案。
那麼有沒有一種很好的方式來在編譯時在java中從枚舉中構造一個常量字符串?
感謝您的任何提示。 vikingsteve
此公告可能是一些使用(字符串文字在Java中枚舉)的:http://stackoverflow.com/questions/6667243/using-enum -values-as-string-literals – CodeChimp
謝謝,但是沒有一個解決方案提供了一個「常量」值,據我所知,例如'MyClass.Route.ProcessSnapshots.name()'不是一個常量(仍然出錯) – vikingsteve
沒有辦法讓Enum成爲「常量」。但是,您可以添加將Enum轉換爲字符串值的功能,該值可以是「final」。我認爲這比舊式的「公共靜態決賽」更好,因爲它更「便攜」,但這只是我的看法。 – CodeChimp