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()
。