EnumSet的真正含义是什么?

2022-08-31 13:46:59

我有以下示例:

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;

}

在此代码中,我可以理解枚举创建了一个枚举类型的 Size。

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


答案 1

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

EnumSet largeSize

所以,是的,(应该命名,因为它是一个集合)的类型。它还应该被归纳,因此被声明为largeSizelargeSizesEnumSet

EnumSet<Size> largeSizes

它的意思是,这是类型 。An 是一个包含特定枚举类型的枚举实例的枚举实例,其方式比其他实现(如 、等)更有效。要了解什么是 a,请阅读其 APIlargeSizesEnumSetEnumSetSetSetHashSetTreeSetEnumSet


答案 2

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

当您需要变量同时采用多个值时,将使用 。例如,您写入屏幕时使用的字体可以同时是粗体斜体。将允许您添加各种值,并测试在任何给定时间是否实际设置了其中一个值。如果你是从其他编程语言来到Java的,那么这个功能通常被称为标志EnumSetEnumEnumSet

比较两者:

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