Java 采用枚举参数的静态方法

Java 采用枚举参数的静态方法,java,enums,Java,Enums,我发现编写适用于enum的静态方法非常困难。这是一个精心设计的示例,但假设您想编写一个方法,该方法接受Enum常量并返回下一个声明的常量。我发现(大约一个小时后)你可以按如下方式做。它可以工作,并且不会生成任何编译器警告 static <E extends Enum<E>> E getNextDeclared(E e) { int ordinal = e.ordinal(); for (Object object : EnumSet.allOf(e.get

我发现编写适用于
enum
的静态方法非常困难。这是一个精心设计的示例,但假设您想编写一个方法,该方法接受
Enum
常量并返回下一个声明的常量。我发现(大约一个小时后)你可以按如下方式做。它可以工作,并且不会生成任何编译器警告

static <E extends Enum<E>> E getNextDeclared(E e) {
    int ordinal = e.ordinal();
    for (Object object : EnumSet.allOf(e.getClass())) {
        if (e.getClass().cast(object).ordinal() == ordinal + 1) {
            return e.getDeclaringClass().cast(object);
        }
    }
    throw new IllegalArgumentException();
}
static E getNextDeclared(E){
int序数=e.序数();
对于(对象:EnumSet.allOf(e.getClass())){
if(例如,getClass().cast(object).ordinal()==ordinal+1){
返回e.getDeclaringClass().cast(对象);
}
}
抛出新的IllegalArgumentException();
}
我错过什么了吗?你能不用石膏做吗?有没有办法在不产生大量警告的情况下简化此过程?另外,编写什么类来代替
对象?

如下所示:

static <E extends Enum<E>> E getNextDeclared(E e) {
    int ordinal = e.ordinal();
    for (E object : EnumSet.allOf(e.getDeclaringClass())) {
        if (object.ordinal() == ordinal + 1) {
            return object;
        }
    }
    throw new IllegalArgumentException();
}
static E getNextDeclared(E){
int序数=e.序数();
对于(E对象:EnumSet.allOf(E.getDeclaringClass())){
if(object.ordinal()==ordinal+1){
返回对象;
}
}
抛出新的IllegalArgumentException();
}
或者,按照路易斯·沃瑟曼的建议:

static <E extends Enum<E>> E getNextDeclared(E e) {
    return e.getDeclaringClass().getEnumConstants()[e.ordinal() + 1];
}
static E getNextDeclared(E){
返回e.getDeclaringClass().getEnumConstants()[e.ordinal()+1];
}

(尽管这会引发一个
ArrayIndexOutOfBoundsException
而不是
IllegalArgumentException

好吧,e.getClass().getEnumConstants[e.ordinal()+1]会更简单…@LouisWasserman我认为应该是
e.getDeclaringClass().getEnumConstants()[e.ordinal()+1]太好了,谢谢。我想我一定错过了什么。我不知道
getEnumConstants()