2013-12-10 50 views
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

+0

此公告可能是一些使用(字符串文字在Java中枚舉)的:http://stackoverflow.com/questions/6667243/using-enum -values-as-string-literals – CodeChimp

+0

謝謝,但是沒有一個解決方案提供了一個「常量」值,據我所知,例如'MyClass.Route.ProcessSnapshots.name()'不是一個常量(仍然出錯) – vikingsteve

+0

沒有辦法讓Enum成爲「常量」。但是,您可以添加將Enum轉換爲字符串值的功能,該值可以是「final」。我認爲這比舊式的「公共靜態決賽」更好,因爲它更「便攜」,但這只是我的看法。 – CodeChimp

回答

2

我沒有找到解決方案。

據我所知,這是不可能的。

我需要使用字符串常量... public static final String XYZ = "Xyz"; - 等

相關問題