2016-06-27 94 views
0

我有以下公共枚舉:可枚舉是非靜態的嗎?

public enum CommandObject { 
    STRING/*etc.*/; 
    private Collection<String> validOptions = new ArrayList<>(); 

    protected Collection<String> getValidOptions() { 
     return validOptions; 
    } 

    protected boolean hasValidOptions() { 
     return !validOptions.isEmpty(); 
    } 

    protected CommandObject addValidOption(String option) { 
     validOptions.add(option); 
     return this; 
    } 

    public static CommandObject argsetOf(String... args) { 
     CommandObject result = STRING; 
     for (String option : args) { 
      result.addValidOption(option); 
     } 
     return result; 
    } 
} 

,但現在看來,這getValidOptions()總是返回同一個集合不管我所說的實例。

例如,當致電argsetOf("hi")argsetOf("bye")時,收集總是由["hi","bye"]組成。

有人知道這個解決方法嗎?我需要這個枚舉有一個「非靜態」屬性。

它不需要是一個枚舉,但應該仍然很容易使用。

+1

編號枚舉總是隱式靜態的。 –

+0

@AndyTurner解決方法? – RoiEX

+0

你不想使用現有命令行解析庫之一的任何原因? –

回答

1

枚舉總是靜態的,隱含的。

這裏的解決方法可能是將外部集合存儲到枚舉中,例如,外部非靜態映射到枚舉,用枚舉值作爲鍵:

Map<CommandObject, Collection<String>> 

然後你就可以擁有此地圖的許多單獨的實例,只要你喜歡,但有一個特定的枚舉值集合仍然關聯。

+0

多次添加'STRING'時,這會起作用嗎? – RoiEX

+0

多次添加'STRING'? –

+0

到這個地圖...無論發現一個更好的解決方案我自己...在一個類中使用枚舉 – RoiEX