2014-09-23 62 views
0

我有一個枚舉定義了一些消息,但這些消息有%s佔位符。例如:動態方法參數枚舉

public enum MyEnum { 
    SUCCESS ("Processed successfully", Arrays.asList()), 
    ERROR ("Error occurred, reason : %s", Arrays.asList("static reason")); 

    private String msg; 
    private Object[] params; 

    private MyEnum(String msg, Object... params) { 
     this.msg = msg; 
     this.params = params; 
    } 

    public String getMessage() { 
     return String.format(this.msg, this.params); 
    } 
} 

所以,在這裏我可以通過ERROR枚舉值的靜態原因。我希望客戶端傳遞錯誤原因並從getMessage()方法獲取生成枚舉值。

我認爲實現這一目標通過在getMessage方法,而不是通過params -

public String getMessage(String... params) { 
    return String.format(this.msg, params); 
} 

難道還有比這樣更好的選擇嗎?我希望我的枚舉基於params返回動態生成的消息。

+1

我想,你的第一個版本不會按你想要的方式工作。由於您必須將參數提供給構造函數,因此您只需編寫格式化文本即可。刪除「參數」作爲參數和成員,並使用你的getMessage方法。 – MPirious 2014-09-23 21:19:11

回答

1

您無法通過構造函數真正做到「動態」:SUCCESSENUM是靜態引用,它們在加載類時都會被初始化爲指向新的MyEnum實例。構造函數將被調用一次,然後在程序的整個生命週期中再次調用。

我想通過在getMessage方法中傳遞參數來實現此目的...有沒有比這樣做更好的選擇?

沒有更好的辦法,我可以想到。

+0

對我有意義,謝謝! – Kevindra 2014-09-23 21:36:24