Java : Enum 示例

Java 中的 Enum (Java SE 22 & JDK 22) 及其示例。
您将找到大多数 Enum<E extends Enum<E>> 方法的代码示例。

注解 :

  • 本文可能使用了翻译软件以方便阅读。 另请查看英文原文

简介

这是所有 Java 语言枚举类的公共基类。有关枚举的更多信息(包括编译器合成的隐式声明方法的描述),请参阅 Java 语言规范第 8.9 节。 (机器翻译)

Class diagram

enum Sample {
    AAA,
    BBB,
    CCC,
}

System.out.println(Sample.AAA.name()); // AAA
System.out.println(Sample.AAA.ordinal()); // 0

System.out.println(Sample.BBB.name()); // BBB
System.out.println(Sample.BBB.ordinal()); // 1

System.out.println(Sample.CCC.name()); // CCC
System.out.println(Sample.CCC.ordinal()); // 2

Enum classes have implicitly declared methods below.

  • public static T valueOf (String)
  • public static T[] values ()
final Sample aaa = Sample.valueOf("AAA");
System.out.println(aaa); // AAA

final Sample[] values = Sample.values();
System.out.println(Arrays.toString(values)); // [AAA, BBB, CCC]

More information about enums, you can be found in section 8.9 of The Java Language Specification.


Constructors

Enum (String name, int ordinal)

唯一建造者。 (机器翻译)

Programmers can't invoke this constructor.

Methods

protected final Object clone ()

抛出 CloneNotSupportedException。 (机器翻译)

enum Sample {
    AAA, BBB, CCC;

    public void func() {
        System.out.println("func! : " + name());

        try {
            clone();
        } catch (CloneNotSupportedException e) {
            System.out.println("CloneNotSupportedException!");
        }
    }
}

Sample.AAA.func();

// Result
// ↓
//func! : AAA
//CloneNotSupportedException!

final int compareTo (E o)

将此枚举与指定对象进行比较以确定顺序。 (机器翻译)

enum SampleX {
    AAA,
    BBB,
    CCC,
}

enum SampleY {
    CCC,
    BBB,
    AAA,
}

System.out.println(SampleX.AAA.compareTo(SampleX.AAA)); // 0
System.out.println(SampleX.AAA.compareTo(SampleX.BBB)); // -1
System.out.println(SampleX.AAA.compareTo(SampleX.CCC)); // -2

System.out.println(SampleY.AAA.compareTo(SampleY.AAA)); // 0
System.out.println(SampleY.AAA.compareTo(SampleY.BBB)); // 1
System.out.println(SampleY.AAA.compareTo(SampleY.CCC)); // 2

final Optional<Enum.EnumDesc<E>> describeConstable ()

如果可以构造枚举描述符 EnumDesc,则返回此实例的枚举描述符;如果无法构造,则返回空的 Optional。 (机器翻译)

enum Sample {
    AAA,
    BBB,
}

final var ret = Sample.AAA.describeConstable();
System.out.println(ret); // Optional[EnumDesc[Sample.AAA]]

final boolean equals (Object other)

如果指定对象等于此枚举常量,则返回 true。 (机器翻译)

enum SampleX {
    AAA,
    BBB,
}

enum SampleY {
    AAA,
    BBB,
}

System.out.println(SampleX.AAA.equals(SampleX.AAA)); // true
System.out.println(SampleX.AAA.equals(SampleX.BBB)); // false

System.out.println(SampleY.AAA.equals(SampleY.AAA)); // true
System.out.println(SampleY.AAA.equals(SampleY.BBB)); // false

System.out.println(SampleX.AAA.equals(SampleY.AAA)); // false
System.out.println(SampleY.BBB.equals(SampleX.BBB)); // false

protected final void finalize ()

已弃用,将删除:此 API 元素将在未来的版本中删除。Finalization 已弃用,将删除。 (机器翻译)

Deprecated.

final Class<E> getDeclaringClass ()

返回与此枚举常量的枚举类型对应的 Class 对象。 (机器翻译)

enum Sample {
    AAA,
    BBB,
}

final var decA = Sample.AAA.getDeclaringClass();
System.out.println(decA); // class Sample

final var decB = Sample.BBB.getDeclaringClass();
System.out.println(decB); // class Sample

System.out.println(decA == decB); // true

final int hashCode ()

返回此枚举常量的哈希码。 (机器翻译)

enum Sample {
    AAA,
    BBB,
    CCC,
}

System.out.println(Sample.AAA.hashCode()); // 648786246
System.out.println(Sample.BBB.hashCode()); // 120360571
System.out.println(Sample.CCC.hashCode()); // 1710814638

final String name ()

返回此枚举常量的名称,与其枚举声明中声明的完全一致。 (机器翻译)

The API documentation says "Most programmers should use the toString() method in preference to this one".

enum Sample {
    AAA,
    BBB,
    CCC,
}

System.out.println(Sample.AAA.name()); // AAA
System.out.println(Sample.BBB.name()); // BBB
System.out.println(Sample.CCC.name()); // CCC

final int ordinal ()

返回此枚举常量的序数(其在枚举声明中的位置,其中初始常量被分配序数零)。 (机器翻译)

enum Sample {
    AAA,
    BBB,
    CCC,
}

System.out.println(Sample.AAA.ordinal()); // 0
System.out.println(Sample.BBB.ordinal()); // 1
System.out.println(Sample.CCC.ordinal()); // 2

String toString ()

返回此枚举常量的名称,包含在声明中。 (机器翻译)

enum Sample {
    AAA,
    BBB,
    CCC,
}

final var str1 = Sample.AAA.toString();
System.out.println(str1); // AAA

final var str2 = Sample.BBB.toString();
System.out.println(str2); // BBB

final var str3 = Sample.CCC.toString();
System.out.println(str3); // CCC

static <T extends Enum<T>> T valueOf (Class<T> enumClass, String name)

返回具有指定名称的指定枚举类的枚举常量。 (机器翻译)

enum Sample {
    AAA,
    BBB,
    CCC,
}

final var aaa = Enum.valueOf(Sample.class, "AAA");
System.out.println(aaa); // AAA

final var bbb = Enum.valueOf(Sample.class, "BBB");
System.out.println(bbb); // BBB

try {
    Enum.valueOf(Sample.class, "ZZZ");
} catch (IllegalArgumentException e) {
    System.out.println("IllegalArgumentException! : " + e.getMessage());
}

// Result
// ↓
//IllegalArgumentException! : No enum constant null.ZZZ

Instead, it would be better to use the following method.

  • public static T valueOf (String)
final var aaa = Sample.valueOf("AAA");
System.out.println(aaa); // AAA

相关文章

To top of page