我有一個接口使用枚舉的EnumSet實現接口
public interface TerminalSymbol {
// methods ...
}
枚舉
// common usage enum that I need
public enum Common implements TerminalSymbol {
EPSILON;
@Override
// methods ...
}
,我想這樣做:
enum Term implements TerminalSymbol {
A, B, C, ...
@Override
// methods ...
}
EnumSet<? extends TerminalSymbol> terminalSymbols = EnumSet.allOf(Term.class);
terminalSymbol.add(Common.EPSILON); // this line gives me error
和錯誤是(在我的情況下):
The method add(capture#1-of ? extends TerminalSymbol) in the type AbstractCollection<capture#1-of ? extends TerminalSymbol> is not applicable for the arguments (Common)
現在我知道如果我使用Set<SomeInterface>
我可以防止這種類型的錯誤(並且我可以繼續開發我的課程,代表正式的語法),但我想使用EnumSet
,因爲它可能比HashSet
。我怎麼解決這個問題?
您試圖使用'EnumSet'而不是'HashSet',或者僅僅是爲了使用'EnumSet',它真的是非常關鍵的效率明智嗎?泛型聰明,它最終看起來像是試圖創建一些堆污染,因爲你已經創建了'Term'的Set,但是試圖添加一個'Common'的實例。 –
是的,現在我意識到如果我想添加()我需要在終端符號的枚舉中添加EPSILON符號,但是我需要在常用枚舉中使用這個epsilon符號,所以我必須使用'HashSet'解決方案:D –