EnumSet 的真正含义是什么?

新手上路,请多包涵

我有以下示例:

 import java.util.EnumSet;
import java.util.Iterator;

public class SizeSet {

    public static void main(String[] args) {
        EnumSet largeSize = EnumSet.of(Size.XL,Size.XXL,Size.XXXL);
        for(Iterator it = largeSize.iterator();it.hasNext();){
            Size size = (Size)it.next();
            System.out.println(size);
        }
    }
}

enum Size {
  S, M, L, XL, XXL, XXXL;

}

在这段代码中,我可以理解 Enum 创建了一个 Enum 类型的 Sizes。

我的问题是: largeSize 是 EnumSet 类型的对象吗?这到底是什么意思?我真的很想更好地理解它。

原文由 Adam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 414
2 个回答

对于任何变量,其类型可在其声明中找到:

 EnumSet largeSize

所以是的, largeSize (应该命名为 largeSizes 因为它是一个集合)是类型 EnumSet 它也应该被泛化,因此被声明为

EnumSet<Size> largeSizes

这意味着 largeSizes 的类型是 EnumSet 。 An EnumSet is a Set which contains enum instance of a specific enum type, in a more efficient way than other Set implementations (like HashSet , TreeSet 等)。要了解 EnumSet 是什么,请阅读其 API

原文由 JB Nizet 发布,翻译遵循 CC BY-SA 3.0 许可协议

一个简单的 Enum 是您一次只能从中选择 一个 的值列表。使用您的示例,对于任何给定的衣服,尺寸只能是 S、M、L 等中的一种。您可以使用简单常量代替 Enum 但这具有可读性、易于维护和严格类型检查的优点。

EnumSet 将在您需要一个变量同时假定多个 Enum 值时使用。例如,您在屏幕上使用的字体可以同时是 粗体 和 _斜体_。 EnumSet 将允许您添加各种值并测试其中一个是否在任何给定时间实际设置。如果您是从其他编程语言转到 Java 的,这就是通常称为 flags 的功能。

比较两者:

 enum Size { S, M, L, XL, XXL, XXXL }
Size currentSize;
...
currentSize = Size.S;
...
if (currentSize == Size.S) ...

定义、分配然后检查单个 Enum 值。

 enum FontStyle { Bold, Italic, Underline, Strikethrough }
EnumSet<FontStyle> currentStyle;
...
currentStyle = EnumSet.of(FontStyle.Bold, FontStyle.Italic);
...
if (currentStyle.contains(FontStyle.Italic)) ...

定义,同时分配两个 Enum 值,然后检查其中一个是否实际设置。

原文由 Gábor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题