根据Java API,当应用程序尝试按名称访问枚举常量,而枚举类型不包含指定名称的常量时,将引发EnumConstantNotPresentException异常。
因此,我决定提出一个场景,其中会抛出java.lang.EnumConstantNotPresentException异常,因此我编写了以下三个类。
当我使用新的MyEnum类执行MyEnumTest1时,我得到了以下异常:
“main”线程中的异常java.lang.NoSuchFieldError:A 在my.enumtest.MyEnumTest1.main(MyEnumTest1.java:8)
当我使用新的MyEnum类执行MyEnumTest2时,我得到了以下异常:
“main”线程中的异常java.lang.IllegalArgumentException:没有枚举常量my.enumtest.MyEnum.A 在java.lang.Enum.valueOf(Unknown Source) 在my.enumtest.MyEnum.valueOf(MyEnum.java:3) 在my.enumtest.MyEnumTest2.main(MyEnumTest2.java:8)
正如您所看到的,在这些情况下都没有出现EnumConstantNotPresentException异常,那么有人可以提供EnumConstantNotPresentException类的用法吗?
P.S. 我知道这个异常可以通过用于反射读取注释的API抛出,但我正在寻找更明显(更简单)的场景。
MyEnum类:
package my.enumtest;
enum MyEnum {
A, B, C;
}
MyEnumTest1类:
package my.enumtest;
import my.enumtest.MyEnum;
class MyEnumTest1 {
public static void main(String [] args) {
System.out.println(MyEnum.A);
}
}
MyEnumTest2类:
package my.enumtest;
import my.enumtest.MyEnum;
class MyEnumTest2 {
public static void main(String [] args) {
System.out.println(MyEnum.valueOf("A"));
}
}
我编译了全部三个文件,然后我修改了MyEnum类以删除常量'A'并重新编译它:
package my.enumtest;
enum MyEnum {
B, C;
}
当我使用新的MyEnum类执行MyEnumTest1时,我得到了以下异常:
“main”线程中的异常java.lang.NoSuchFieldError:A 在my.enumtest.MyEnumTest1.main(MyEnumTest1.java:8)
当我使用新的MyEnum类执行MyEnumTest2时,我得到了以下异常:
“main”线程中的异常java.lang.IllegalArgumentException:没有枚举常量my.enumtest.MyEnum.A 在java.lang.Enum.valueOf(Unknown Source) 在my.enumtest.MyEnum.valueOf(MyEnum.java:3) 在my.enumtest.MyEnumTest2.main(MyEnumTest2.java:8)
正如您所看到的,在这些情况下都没有出现EnumConstantNotPresentException异常,那么有人可以提供EnumConstantNotPresentException类的用法吗?
P.S. 我知道这个异常可以通过用于反射读取注释的API抛出,但我正在寻找更明显(更简单)的场景。