gpt4 book ai didi

java - 采用 Enum 参数的静态方法

转载 作者:行者123 更新时间:2023-12-01 12:12:40 27 4
gpt4 key购买 nike

我发现编写适用于Enums的静态方法非常困难。这是一个非常人为的示例,但假设您想要编写一个方法,该方法采用 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();
}

我错过了什么吗?不用类型转换你能做到吗?有没有什么方法可以简化这个过程而不产生大量警告?另外,什么是合适的类来代替Object

最佳答案

像这样:

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();
}

或者,根据 Louis Wasserman 的建议:

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

(尽管如果设置过高,会抛出 ArrayIndexOutOfBoundsException 而不是 IllegalArgumentException)。

关于java - 采用 Enum 参数的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27191819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com